Commit 0d0c539c authored by Robert Schilling's avatar Robert Schilling

Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce

parents 76f7bdcc b3890749
...@@ -37,6 +37,6 @@ public/assets/ ...@@ -37,6 +37,6 @@ public/assets/
public/uploads.* public/uploads.*
public/uploads/ public/uploads/
rails_best_practices_output.html rails_best_practices_output.html
tags /tags
tmp/ tmp/
vendor/bundle/* vendor/bundle/*
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 7.11.0 (unreleased) v 7.11.0 (unreleased)
- Make Reply-To config apply to change e-mail confirmation and other Devise notifications (Stan Hu)
- Don't allow a merge request to be merged when its title starts with "WIP". - Don't allow a merge request to be merged when its title starts with "WIP".
- Add a page title to every page.
- Get Gitorious importer to work again. - Get Gitorious importer to work again.
- Fix clone URL field and X11 Primary selection (Dmitry Medvinsky) - Fix clone URL field and X11 Primary selection (Dmitry Medvinsky)
- Ignore invalid lines in .gitmodules - Ignore invalid lines in .gitmodules
...@@ -11,6 +13,7 @@ v 7.11.0 (unreleased) ...@@ -11,6 +13,7 @@ v 7.11.0 (unreleased)
- Fix "Revspec not found" errors when viewing diffs in a forked project with submodules (Stan Hu) - Fix "Revspec not found" errors when viewing diffs in a forked project with submodules (Stan Hu)
- -
- Fix broken file browsing with relative submodule in personal projects (Stan Hu) - Fix broken file browsing with relative submodule in personal projects (Stan Hu)
- Fix DB error when trying to tag a repository (Stan Hu)
- Add "Reply quoting selected text" shortcut key (`r`) - Add "Reply quoting selected text" shortcut key (`r`)
- Fix bug causing `@whatever` inside an issue's first code block to be picked up as a user mention. - Fix bug causing `@whatever` inside an issue's first code block to be picked up as a user mention.
- Fix bug causing `@whatever` inside an inline code snippet (backtick-style) to be picked up as a user mention. - Fix bug causing `@whatever` inside an inline code snippet (backtick-style) to be picked up as a user mention.
...@@ -21,7 +24,7 @@ v 7.11.0 (unreleased) ...@@ -21,7 +24,7 @@ v 7.11.0 (unreleased)
- Include commit comments in MR from a forked project. - Include commit comments in MR from a forked project.
- Fix adding new group members from admin area - Fix adding new group members from admin area
- Add default project and snippet visibility settings to the admin web UI. - Add default project and snippet visibility settings to the admin web UI.
- - Show incompatible projects in Google Code import status (Stan Hu)
- Fix bug where commit data would not appear in some subdirectories (Stan Hu) - Fix bug where commit data would not appear in some subdirectories (Stan Hu)
- Fix bug where Slack service channel was not saved in admin template settings. (Stan Hu) - Fix bug where Slack service channel was not saved in admin template settings. (Stan Hu)
- Move snippets UI to fluid layout - Move snippets UI to fluid layout
......
...@@ -8,7 +8,6 @@ class Dispatcher ...@@ -8,7 +8,6 @@ class Dispatcher
initPageScripts: -> initPageScripts: ->
page = $('body').attr('data-page') page = $('body').attr('data-page')
project_id = $('body').attr('data-project-id')
unless page unless page
return false return false
......
...@@ -35,7 +35,12 @@ pre { ...@@ -35,7 +35,12 @@ pre {
/* Link to current header. */ /* Link to current header. */
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
position: relative; position: relative;
&:hover > :last-child {
a.anchor {
display: none;
}
&:hover > a.anchor {
$size: 16px; $size: 16px;
position: absolute; position: absolute;
right: 100%; right: 100%;
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# #
# Automatically sets the layout and ensures an administrator is logged in # Automatically sets the layout and ensures an administrator is logged in
class Admin::ApplicationController < ApplicationController class Admin::ApplicationController < ApplicationController
layout 'admin'
before_action :authenticate_admin! before_action :authenticate_admin!
layout 'admin'
def authenticate_admin! def authenticate_admin!
return render_404 unless current_user.is_admin? return render_404 unless current_user.is_admin?
......
...@@ -3,6 +3,7 @@ require 'gon' ...@@ -3,6 +3,7 @@ require 'gon'
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
include Gitlab::CurrentSettings include Gitlab::CurrentSettings
include GitlabRoutingHelper include GitlabRoutingHelper
include PageLayoutHelper
PER_PAGE = 20 PER_PAGE = 20
......
class Dashboard::ApplicationController < ApplicationController
layout 'dashboard'
end
class Dashboard::GroupsController < ApplicationController class Dashboard::GroupsController < Dashboard::ApplicationController
def index def index
@group_members = current_user.group_members.page(params[:page]).per(PER_PAGE) @group_members = current_user.group_members.page(params[:page]).per(PER_PAGE)
end end
......
class Dashboard::MilestonesController < ApplicationController class Dashboard::MilestonesController < Dashboard::ApplicationController
before_action :load_projects before_action :load_projects
def index def index
......
class Dashboard::ProjectsController < ApplicationController class Dashboard::ProjectsController < Dashboard::ApplicationController
before_action :event_filter before_action :event_filter
def starred def starred
......
class DashboardController < ApplicationController class DashboardController < Dashboard::ApplicationController
respond_to :html
before_action :load_projects, except: [:projects] before_action :load_projects, except: [:projects]
before_action :event_filter, only: :show before_action :event_filter, only: :show
respond_to :html
def show def show
@projects = @projects.includes(:namespace) @projects = @projects.includes(:namespace)
......
class Explore::ApplicationController < ApplicationController
layout 'explore'
end
class Explore::GroupsController < ApplicationController class Explore::GroupsController < Explore::ApplicationController
skip_before_action :authenticate_user!, skip_before_action :authenticate_user!,
:reject_blocked, :set_current_user_for_observers :reject_blocked, :set_current_user_for_observers
layout "explore"
def index def index
@groups = GroupsFinder.new.execute(current_user) @groups = GroupsFinder.new.execute(current_user)
@groups = @groups.search(params[:search]) if params[:search].present? @groups = @groups.search(params[:search]) if params[:search].present?
......
class Explore::ProjectsController < ApplicationController class Explore::ProjectsController < Explore::ApplicationController
skip_before_action :authenticate_user!, skip_before_action :authenticate_user!,
:reject_blocked :reject_blocked
layout 'explore'
def index def index
@projects = ProjectsFinder.new.execute(current_user) @projects = ProjectsFinder.new.execute(current_user)
@tags = @projects.tags_on(:tags) @tags = @projects.tags_on(:tags)
......
class Groups::ApplicationController < ApplicationController class Groups::ApplicationController < ApplicationController
layout 'group'
private private
...@@ -17,12 +18,4 @@ class Groups::ApplicationController < ApplicationController ...@@ -17,12 +18,4 @@ class Groups::ApplicationController < ApplicationController
return render_404 return render_404
end end
end end
def determine_layout
if current_user
'group'
else
'public_group'
end
end
end end
class Groups::AvatarsController < ApplicationController class Groups::AvatarsController < ApplicationController
layout "profile"
def destroy def destroy
@group = Group.find_by(path: params[:group_id]) @group = Group.find_by(path: params[:group_id])
@group.remove_avatar! @group.remove_avatar!
......
...@@ -6,8 +6,6 @@ class Groups::GroupMembersController < Groups::ApplicationController ...@@ -6,8 +6,6 @@ class Groups::GroupMembersController < Groups::ApplicationController
before_action :authorize_read_group! before_action :authorize_read_group!
before_action :authorize_admin_group!, except: [:index, :leave] before_action :authorize_admin_group!, except: [:index, :leave]
layout :determine_layout
def index def index
@project = @group.projects.find(params[:project_id]) if params[:project_id] @project = @group.projects.find(params[:project_id]) if params[:project_id]
@members = @group.group_members @members = @group.group_members
......
class Groups::MilestonesController < ApplicationController class Groups::MilestonesController < Groups::ApplicationController
layout 'group'
before_action :authorize_group_milestone!, only: :update before_action :authorize_group_milestone!, only: :update
def index def index
......
...@@ -11,7 +11,6 @@ class GroupsController < Groups::ApplicationController ...@@ -11,7 +11,6 @@ class GroupsController < Groups::ApplicationController
# Load group projects # Load group projects
before_action :load_projects, except: [:new, :create, :projects, :edit, :update] before_action :load_projects, except: [:new, :create, :projects, :edit, :update]
before_action :event_filter, only: :show before_action :event_filter, only: :show
before_action :set_title, only: [:new, :create]
layout :determine_layout layout :determine_layout
...@@ -119,17 +118,11 @@ class GroupsController < Groups::ApplicationController ...@@ -119,17 +118,11 @@ class GroupsController < Groups::ApplicationController
end end
end end
def set_title
@title = 'New Group'
end
def determine_layout def determine_layout
if [:new, :create].include?(action_name.to_sym) if [:new, :create].include?(action_name.to_sym)
'navless' 'application'
elsif current_user
'group'
else else
'public_group' 'group'
end end
end end
......
class HelpController < ApplicationController class HelpController < ApplicationController
layout 'help'
def index def index
end end
def show def show
category = clean_path_info(path_params[:category]) @category = clean_path_info(path_params[:category])
file = path_params[:file] @file = path_params[:file]
respond_to do |format| respond_to do |format|
format.any(:markdown, :md, :html) do format.any(:markdown, :md, :html) do
path = Rails.root.join('doc', category, "#{file}.md") path = Rails.root.join('doc', @category, "#{@file}.md")
if File.exist?(path) if File.exist?(path)
@markdown = File.read(path) @markdown = File.read(path)
...@@ -22,7 +24,7 @@ class HelpController < ApplicationController ...@@ -22,7 +24,7 @@ class HelpController < ApplicationController
# Allow access to images in the doc folder # Allow access to images in the doc folder
format.any(:png, :gif, :jpeg) do format.any(:png, :gif, :jpeg) do
path = Rails.root.join('doc', category, "#{file}.#{params[:format]}") path = Rails.root.join('doc', @category, "#{@file}.#{params[:format]}")
if File.exist?(path) if File.exist?(path)
send_file(path, disposition: 'inline') send_file(path, disposition: 'inline')
......
...@@ -72,6 +72,7 @@ class Import::GoogleCodeController < Import::BaseController ...@@ -72,6 +72,7 @@ class Import::GoogleCodeController < Import::BaseController
end end
@repos = client.repos @repos = client.repos
@incompatible_repos = client.incompatible_repos
@already_added_projects = current_user.created_projects.where(import_type: "google_code") @already_added_projects = current_user.created_projects.where(import_type: "google_code")
already_added_projects_names = @already_added_projects.pluck(:import_source) already_added_projects_names = @already_added_projects.pluck(:import_source)
......
...@@ -4,8 +4,6 @@ class InvitesController < ApplicationController ...@@ -4,8 +4,6 @@ class InvitesController < ApplicationController
respond_to :html respond_to :html
layout 'navless'
def show def show
end end
......
class Oauth::ApplicationsController < Doorkeeper::ApplicationsController class Oauth::ApplicationsController < Doorkeeper::ApplicationsController
include PageLayoutHelper
before_action :authenticate_user! before_action :authenticate_user!
layout "profile"
layout 'profile'
def index def index
head :forbidden and return head :forbidden and return
......
class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
before_action :authenticate_resource_owner! before_action :authenticate_resource_owner!
layout "profile"
layout 'profile'
def new def new
if pre_auth.authorizable? if pre_auth.authorizable?
......
class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicationsController class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicationsController
layout "profile" include PageLayoutHelper
layout 'profile'
def destroy def destroy
Doorkeeper::AccessToken.revoke_all_for(params[:id], current_resource_owner) Doorkeeper::AccessToken.revoke_all_for(params[:id], current_resource_owner)
......
class Profiles::AccountsController < ApplicationController class Profiles::AccountsController < Profiles::ApplicationController
layout "profile"
def show def show
@user = current_user @user = current_user
end end
......
class Profiles::ApplicationController < ApplicationController
layout 'profile'
end
class Profiles::AvatarsController < ApplicationController class Profiles::AvatarsController < Profiles::ApplicationController
layout "profile"
def destroy def destroy
@user = current_user @user = current_user
@user.remove_avatar! @user.remove_avatar!
......
class Profiles::EmailsController < ApplicationController class Profiles::EmailsController < Profiles::ApplicationController
layout "profile"
def index def index
@primary = current_user.email @primary = current_user.email
@public_email = current_user.public_email @public_email = current_user.public_email
......
class Profiles::KeysController < ApplicationController class Profiles::KeysController < Profiles::ApplicationController
layout "profile"
skip_before_action :authenticate_user!, only: [:get_keys] skip_before_action :authenticate_user!, only: [:get_keys]
def index def index
......
class Profiles::NotificationsController < ApplicationController class Profiles::NotificationsController < Profiles::ApplicationController
layout 'profile'
def show def show
@user = current_user @user = current_user
@notification = current_user.notification @notification = current_user.notification
......
class Profiles::PasswordsController < ApplicationController class Profiles::PasswordsController < Profiles::ApplicationController
layout :determine_layout
skip_before_action :check_password_expiration, only: [:new, :create] skip_before_action :check_password_expiration, only: [:new, :create]
before_action :set_user before_action :set_user
before_action :set_title
before_action :authorize_change_password! before_action :authorize_change_password!
layout :determine_layout
def new def new
end end
...@@ -66,13 +65,9 @@ class Profiles::PasswordsController < ApplicationController ...@@ -66,13 +65,9 @@ class Profiles::PasswordsController < ApplicationController
@user = current_user @user = current_user
end end
def set_title
@title = "New password"
end
def determine_layout def determine_layout
if [:new, :create].include?(action_name.to_sym) if [:new, :create].include?(action_name.to_sym)
'navless' 'application'
else else
'profile' 'profile'
end end
......
class ProfilesController < ApplicationController class ProfilesController < Profiles::ApplicationController
include ActionView::Helpers::SanitizeHelper include ActionView::Helpers::SanitizeHelper
before_action :user before_action :user
before_action :authorize_change_username!, only: :update_username before_action :authorize_change_username!, only: :update_username
skip_before_action :require_email, only: [:show, :update] skip_before_action :require_email, only: [:show, :update]
layout 'profile'
def show def show
end end
......
class Projects::ApplicationController < ApplicationController class Projects::ApplicationController < ApplicationController
before_action :project before_action :project
before_action :repository before_action :repository
layout :determine_layout layout 'project'
def authenticate_user! def authenticate_user!
# Restrict access to Projects area only # Restrict access to Projects area only
...@@ -17,14 +17,6 @@ class Projects::ApplicationController < ApplicationController ...@@ -17,14 +17,6 @@ class Projects::ApplicationController < ApplicationController
super super
end end
def determine_layout
if current_user
'projects'
else
'public_projects'
end
end
def require_branch_head def require_branch_head
unless @repository.branch_names.include?(@ref) unless @repository.branch_names.include?(@ref)
redirect_to( redirect_to(
......
class Projects::AvatarsController < Projects::ApplicationController class Projects::AvatarsController < Projects::ApplicationController
layout 'project'
before_action :project before_action :project
def show def show
......
...@@ -18,7 +18,6 @@ class Projects::ForksController < Projects::ApplicationController ...@@ -18,7 +18,6 @@ class Projects::ForksController < Projects::ApplicationController
notice: 'Project was successfully forked.' notice: 'Project was successfully forked.'
) )
else else
@title = 'Fork project'
render :error render :error
end end
end end
......
class Projects::UploadsController < Projects::ApplicationController class Projects::UploadsController < Projects::ApplicationController
layout 'project'
skip_before_action :authenticate_user!, :reject_blocked!, :project, skip_before_action :authenticate_user!, :reject_blocked!, :project,
:repository, if: -> { action_name == 'show' && image? } :repository, if: -> { action_name == 'show' && image? }
......
...@@ -6,17 +6,16 @@ class ProjectsController < ApplicationController ...@@ -6,17 +6,16 @@ class ProjectsController < ApplicationController
# Authorize # Authorize
before_action :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive] before_action :authorize_admin_project!, only: [:edit, :update, :destroy, :transfer, :archive, :unarchive]
before_action :set_title, only: [:new, :create]
before_action :event_filter, only: :show before_action :event_filter, only: :show
layout 'navless', only: [:new, :create, :fork] layout :determine_layout
def new def new
@project = Project.new @project = Project.new
end end
def edit def edit
render 'edit', layout: 'project_settings' render 'edit'
end end
def create def create
...@@ -46,7 +45,7 @@ class ProjectsController < ApplicationController ...@@ -46,7 +45,7 @@ class ProjectsController < ApplicationController
end end
format.js format.js
else else
format.html { render 'edit', layout: 'project_settings' } format.html { render 'edit' }
format.js format.js
end end
end end
...@@ -72,13 +71,13 @@ class ProjectsController < ApplicationController ...@@ -72,13 +71,13 @@ class ProjectsController < ApplicationController
format.html do format.html do
if @project.repository_exists? if @project.repository_exists?
if @project.empty_repo? if @project.empty_repo?
render 'projects/empty', layout: user_layout render 'projects/empty'
else else
@last_push = current_user.recent_push(@project.id) if current_user @last_push = current_user.recent_push(@project.id) if current_user
render :show, layout: user_layout render :show
end end
else else
render 'projects/no_repo', layout: user_layout render 'projects/no_repo'
end end
end end
...@@ -160,12 +159,14 @@ class ProjectsController < ApplicationController ...@@ -160,12 +159,14 @@ class ProjectsController < ApplicationController
private private
def set_title def determine_layout
@title = 'New Project' if [:new, :create].include?(action_name.to_sym)
end 'application'
elsif [:edit, :update].include?(action_name.to_sym)
def user_layout 'project_settings'
current_user ? 'projects' : 'public_projects' else
'project'
end
end end
def load_events def load_events
......
class SearchController < ApplicationController class SearchController < ApplicationController
include SearchHelper include SearchHelper
layout 'search'
def show def show
return if params[:search].nil? || params[:search].blank? return if params[:search].nil? || params[:search].blank?
......
...@@ -7,14 +7,11 @@ class SnippetsController < ApplicationController ...@@ -7,14 +7,11 @@ class SnippetsController < ApplicationController
# Allow destroy snippet # Allow destroy snippet
before_action :authorize_admin_snippet!, only: [:destroy] before_action :authorize_admin_snippet!, only: [:destroy]
before_action :set_title
skip_before_action :authenticate_user!, only: [:index, :user_index, :show, :raw] skip_before_action :authenticate_user!, only: [:index, :user_index, :show, :raw]
layout 'snippets'
respond_to :html respond_to :html
layout :determine_layout
def index def index
if params[:username].present? if params[:username].present?
@user = User.find_by(username: params[:username]) @user = User.find_by(username: params[:username])
...@@ -98,16 +95,7 @@ class SnippetsController < ApplicationController ...@@ -98,16 +95,7 @@ class SnippetsController < ApplicationController
return render_404 unless can?(current_user, :admin_personal_snippet, @snippet) return render_404 unless can?(current_user, :admin_personal_snippet, @snippet)
end end
def set_title
@title = 'Snippets'
@title_url = snippets_path
end
def snippet_params def snippet_params
params.require(:personal_snippet).permit(:title, :content, :file_name, :private, :visibility_level) params.require(:personal_snippet).permit(:title, :content, :file_name, :private, :visibility_level)
end end
def determine_layout
current_user ? 'snippets' : 'public_users'
end
end end
class UsersController < ApplicationController class UsersController < ApplicationController
skip_before_action :authenticate_user! skip_before_action :authenticate_user!
before_action :set_user before_action :set_user
layout :determine_layout
def show def show
@contributed_projects = contributed_projects.joined(@user). @contributed_projects = contributed_projects.joined(@user).
...@@ -13,9 +12,6 @@ class UsersController < ApplicationController ...@@ -13,9 +12,6 @@ class UsersController < ApplicationController
# Collect only groups common for both users # Collect only groups common for both users
@groups = @user.groups & GroupsFinder.new.execute(current_user) @groups = @user.groups & GroupsFinder.new.execute(current_user)
@title = @user.name
@title_url = user_path(@user)
respond_to do |format| respond_to do |format|
format.html format.html
...@@ -51,14 +47,6 @@ class UsersController < ApplicationController ...@@ -51,14 +47,6 @@ class UsersController < ApplicationController
render 'calendar_activities', layout: false render 'calendar_activities', layout: false
end end
def determine_layout
if current_user
'navless'
else
'public_users'
end
end
private private
def set_user def set_user
......
...@@ -34,10 +34,8 @@ module GitlabMarkdownHelper ...@@ -34,10 +34,8 @@ module GitlabMarkdownHelper
# see https://github.com/vmg/redcarpet#darling-i-packed-you-a-couple-renderers-for-lunch # see https://github.com/vmg/redcarpet#darling-i-packed-you-a-couple-renderers-for-lunch
rend = Redcarpet::Render::GitlabHTML.new(self, user_color_scheme_class, { rend = Redcarpet::Render::GitlabHTML.new(self, user_color_scheme_class, {
with_toc_data: true, # Handled further down the line by Gitlab::Markdown::SanitizationFilter
safe_links_only: true, escape_html: false
# Handled further down the line by HTML::Pipeline::SanitizationFilter
escape_html: false
}.merge(options)) }.merge(options))
# see https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use # see https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use
...@@ -45,7 +43,6 @@ module GitlabMarkdownHelper ...@@ -45,7 +43,6 @@ module GitlabMarkdownHelper
no_intra_emphasis: true, no_intra_emphasis: true,
tables: true, tables: true,
fenced_code_blocks: true, fenced_code_blocks: true,
autolink: true,
strikethrough: true, strikethrough: true,
lax_spacing: true, lax_spacing: true,
space_after_headers: true, space_after_headers: true,
......
...@@ -19,24 +19,6 @@ module GroupsHelper ...@@ -19,24 +19,6 @@ module GroupsHelper
end end
end end
def group_head_title
title = @group.name
title = if current_action?(:issues)
"Issues - " + title
elsif current_action?(:merge_requests)
"Merge requests - " + title
elsif current_action?(:members)
"Members - " + title
elsif current_action?(:edit)
"Settings - " + title
else
title
end
title
end
def group_settings_page? def group_settings_page?
if current_controller?('groups') if current_controller?('groups')
current_action?('edit') || current_action?('projects') current_action?('edit') || current_action?('projects')
......
...@@ -43,17 +43,6 @@ module IssuesHelper ...@@ -43,17 +43,6 @@ module IssuesHelper
end end
end end
def title_for_issue(issue_iid, project = @project)
return '' if project.nil?
if project.default_issues_tracker?
issue = project.issues.where(iid: issue_iid).first
return issue.title if issue
end
''
end
def issue_timestamp(issue) def issue_timestamp(issue)
# Shows the created at time and the updated at time if different # Shows the created at time and the updated at time if different
ts = "#{time_ago_with_tooltip(issue.created_at, 'bottom', 'note_created_ago')}" ts = "#{time_ago_with_tooltip(issue.created_at, 'bottom', 'note_created_ago')}"
...@@ -110,5 +99,5 @@ module IssuesHelper ...@@ -110,5 +99,5 @@ module IssuesHelper
end end
# Required for Gitlab::Markdown::IssueReferenceFilter # Required for Gitlab::Markdown::IssueReferenceFilter
module_function :url_for_issue, :title_for_issue module_function :url_for_issue
end end
module PageLayoutHelper
def page_title(*titles)
@page_title ||= []
@page_title.push(*titles.compact) if titles.any?
@page_title.join(" | ")
end
def header_title(title = nil, title_url = nil)
if title
@header_title = title
@header_title_url = title_url
else
@header_title_url ? link_to(@header_title, @header_title_url) : @header_title
end
end
def sidebar(name = nil)
if name
@sidebar = name
else
@sidebar
end
end
end
...@@ -192,46 +192,6 @@ module ProjectsHelper ...@@ -192,46 +192,6 @@ module ProjectsHelper
'unknown' 'unknown'
end end
def project_head_title
title = @project.name_with_namespace
title = if current_controller?(:tree)
"#{@project.path}\/#{@path} at #{@ref} - " + title
elsif current_controller?(:issues)
if current_action?(:show)
"Issue ##{@issue.iid} - #{@issue.title} - " + title
else
"Issues - " + title
end
elsif current_controller?(:blob)
if current_action?(:new) || current_action?(:create)
"New file at #{@ref}"
elsif current_action?(:show)
"#{@blob.path} at #{@ref}"
elsif @blob
"Edit file #{@blob.path} at #{@ref}"
end
elsif current_controller?(:commits)
"Commits at #{@ref} - " + title
elsif current_controller?(:merge_requests)
if current_action?(:show)
"Merge request ##{@merge_request.iid} - " + title
else
"Merge requests - " + title
end
elsif current_controller?(:wikis)
"Wiki - " + title
elsif current_controller?(:network)
"Network graph - " + title
elsif current_controller?(:graphs)
"Graphs - " + title
else
title
end
title
end
def default_url_to_repo(project = nil) def default_url_to_repo(project = nil)
project = project || @project project = project || @project
current_user ? project.url_to_repo : project.http_url_to_repo current_user ? project.url_to_repo : project.http_url_to_repo
......
class DeviseMailer < Devise::Mailer
default from: "GitLab <#{Gitlab.config.gitlab.email_from}>"
default reply_to: Gitlab.config.gitlab.email_reply_to
end
...@@ -15,6 +15,10 @@ class ExternalIssue ...@@ -15,6 +15,10 @@ class ExternalIssue
@issue_identifier.to_s @issue_identifier.to_s
end end
def title
"External Issue #{self}"
end
def ==(other) def ==(other)
other.is_a?(self.class) && (to_s == other.to_s) other.is_a?(self.class) && (to_s == other.to_s)
end end
......
...@@ -329,14 +329,18 @@ class Project < ActiveRecord::Base ...@@ -329,14 +329,18 @@ class Project < ActiveRecord::Base
self.id self.id
end end
def issue_exists?(issue_id) def get_issue(issue_id)
if default_issues_tracker? if default_issues_tracker?
self.issues.where(iid: issue_id).first.present? issues.find_by(iid: issue_id)
else else
true ExternalIssue.new(issue_id, self)
end end
end end
def issue_exists?(issue_id)
get_issue(issue_id)
end
def default_issue_tracker def default_issue_tracker
gitlab_issue_tracker_service || create_gitlab_issue_tracker_service gitlab_issue_tracker_service || create_gitlab_issue_tracker_service
end end
...@@ -350,11 +354,7 @@ class Project < ActiveRecord::Base ...@@ -350,11 +354,7 @@ class Project < ActiveRecord::Base
end end
def default_issues_tracker? def default_issues_tracker?
if external_issue_tracker !external_issue_tracker
false
else
true
end
end end
def external_issues_trackers def external_issues_trackers
......
- page_title "Settings"
%h3.page-title Application settings %h3.page-title Application settings
%hr %hr
= render 'form' = render 'form'
- page_title "Edit", @application.name, "Applications"
%h3.page-title Edit application %h3.page-title Edit application
- @url = admin_application_path(@application) - @url = admin_application_path(@application)
= render 'form', application: @application = render 'form', application: @application
\ No newline at end of file
- page_title "Applications"
%h3.page-title %h3.page-title
System OAuth applications System OAuth applications
%p.light %p.light
......
- page_title "New Application"
%h3.page-title New application %h3.page-title New application
- @url = admin_applications_path - @url = admin_applications_path
= render 'form', application: @application = render 'form', application: @application
\ No newline at end of file
- page_title @application.name, "Applications"
%h3.page-title %h3.page-title
Application: #{@application.name} Application: #{@application.name}
......
- page_title "Background Jobs"
%h3.page-title Background Jobs %h3.page-title Background Jobs
%p.light GitLab uses #{link_to "sidekiq", "http://sidekiq.org/"} library for async job processing %p.light GitLab uses #{link_to "sidekiq", "http://sidekiq.org/"} library for async job processing
......
- page_title "Broadcast Messages"
%h3.page-title %h3.page-title
Broadcast Messages Broadcast Messages
%p.light %p.light
......
- page_title "Deploy Keys"
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
Public deploy keys (#{@deploy_keys.count}) Public deploy keys (#{@deploy_keys.count})
......
- page_title "New Deploy Key"
%h3.page-title New public deploy key %h3.page-title New public deploy key
%hr %hr
......
- page_title @deploy_key.title, "Deploy Keys"
.row .row
.col-md-4 .col-md-4
.panel.panel-default .panel.panel-default
......
- page_title "Edit", @group.name, "Groups"
%h3.page-title Edit group: #{@group.name} %h3.page-title Edit group: #{@group.name}
%hr %hr
= render 'form' = render 'form'
- page_title "Groups"
%h3.page-title %h3.page-title
Groups (#{@groups.total_count}) Groups (#{@groups.total_count})
= link_to 'New Group', new_admin_group_path, class: "btn btn-new pull-right" = link_to 'New Group', new_admin_group_path, class: "btn btn-new pull-right"
......
- page_title "New Group"
%h3.page-title New group %h3.page-title New group
%hr %hr
= render 'form' = render 'form'
- page_title @group.name, "Groups"
%h3.page-title %h3.page-title
Group: #{@group.name} Group: #{@group.name}
......
- page_title "System Hooks"
%h3.page-title %h3.page-title
System hooks System hooks
......
- page_title @key.title, "Keys"
= render "profiles/keys/key_details", admin: true = render "profiles/keys/key_details", admin: true
- page_title "Logs"
- loggers = [Gitlab::GitLogger, Gitlab::AppLogger, - loggers = [Gitlab::GitLogger, Gitlab::AppLogger,
Gitlab::ProductionLogger, Gitlab::SidekiqLogger] Gitlab::ProductionLogger, Gitlab::SidekiqLogger]
%ul.nav.nav-tabs.log-tabs %ul.nav.nav-tabs.log-tabs
......
- page_title "Projects"
= render 'shared/show_aside' = render 'shared/show_aside'
.row .row
......
- page_title @project.name_with_namespace, "Projects"
%h3.page-title %h3.page-title
Project: #{@project.name_with_namespace} Project: #{@project.name_with_namespace}
= link_to edit_project_path(@project), class: "btn pull-right" do = link_to edit_project_path(@project), class: "btn pull-right" do
......
- page_title @service.title, "Service Templates"
= render 'form' = render 'form'
- page_title "Service Templates"
%h3.page-title Service templates %h3.page-title Service templates
%p.light Service template allows you to set default values for project services %p.light Service template allows you to set default values for project services
......
- page_title "Edit", @user.name, "Users"
%h3.page-title %h3.page-title
Edit user: #{@user.name} Edit user: #{@user.name}
.back-link .back-link
......
- page_title "Users"
= render 'shared/show_aside' = render 'shared/show_aside'
.row .row
......
- page_title "New User"
%h3.page-title %h3.page-title
New user New user
%hr %hr
......
- page_title @user.name, "Users"
%h3.page-title %h3.page-title
User: User:
= @user.name = @user.name
......
- page_title "Groups"
%h3.page-title %h3.page-title
Group Membership Group Membership
- if current_user.can_create_group? - if current_user.can_create_group?
......
- page_title "Issues"
= content_for :meta_tags do = content_for :meta_tags do
- if current_user - if current_user
= auto_discovery_link_tag(:atom, issues_dashboard_url(format: :atom, private_token: current_user.private_token), title: "#{current_user.name} issues") = auto_discovery_link_tag(:atom, issues_dashboard_url(format: :atom, private_token: current_user.private_token), title: "#{current_user.name} issues")
......
- page_title "Merge Requests"
%h3.page-title %h3.page-title
Merge Requests Merge Requests
......
- page_title "Milestones"
%h3.page-title %h3.page-title
Milestones Milestones
%span.pull-right #{@dashboard_milestones.count} milestones %span.pull-right #{@dashboard_milestones.count} milestones
......
- page_title @dashboard_milestone.title, "Milestones"
%h4.page-title %h4.page-title
.issue-box{ class: "issue-box-#{@dashboard_milestone.closed? ? 'closed' : 'open'}" } .issue-box{ class: "issue-box-#{@dashboard_milestone.closed? ? 'closed' : 'open'}" }
- if @dashboard_milestone.closed? - if @dashboard_milestone.closed?
......
- page_title "Starred Projects"
- if @projects.any? - if @projects.any?
= render 'shared/show_aside' = render 'shared/show_aside'
......
- page_title "Sign up"
= render 'devise/shared/signup_box' = render 'devise/shared/signup_box'
= render 'devise/shared/sign_in_link' = render 'devise/shared/sign_in_link'
\ No newline at end of file
- page_title "Sign in"
%div %div
- if signin_enabled? || ldap_enabled? - if signin_enabled? || ldap_enabled?
= render 'devise/shared/signin_box' = render 'devise/shared/signin_box'
......
- page_title "Edit", @application.name, "Applications"
%h3.page-title Edit application %h3.page-title Edit application
= render 'form', application: @application = render 'form', application: @application
\ No newline at end of file
- page_title "Applications"
%h3.page-title Your applications %h3.page-title Your applications
%p= link_to 'New Application', new_oauth_application_path, class: 'btn btn-success' %p= link_to 'New Application', new_oauth_application_path, class: 'btn btn-success'
%table.table.table-striped %table.table.table-striped
...@@ -13,4 +14,4 @@ ...@@ -13,4 +14,4 @@
%td= link_to application.name, oauth_application_path(application) %td= link_to application.name, oauth_application_path(application)
%td= application.redirect_uri %td= application.redirect_uri
%td= link_to 'Edit', edit_oauth_application_path(application), class: 'btn btn-link' %td= link_to 'Edit', edit_oauth_application_path(application), class: 'btn btn-link'
%td= render 'delete_form', application: application %td= render 'delete_form', application: application
\ No newline at end of file
- page_title @application.name, "Applications"
%h3.page-title %h3.page-title
Application: #{@application.name} Application: #{@application.name}
......
- page_title "Access Denied"
%h1 403 %h1 403
%h3 Access Denied %h3 Access Denied
%hr %hr
......
- page_title "Encoding Error"
%h1 500 %h1 500
%h3 Encoding Error %h3 Encoding Error
%hr %hr
......
- page_title "Git Resource Not Found"
%h1 404 %h1 404
%h3 Git Resource Not found %h3 Git Resource Not found
%hr %hr
......
- page_title "Not Found"
%h1 404 %h1 404
%h3 The resource you were looking for doesn't exist. %h3 The resource you were looking for doesn't exist.
%hr %hr
......
- page_title "Auth Error"
%h1 422 %h1 422
%h3 Sign-in using #{@provider} auth failed %h3 Sign-in using #{@provider} auth failed
%hr %hr
......
- page_title "Groups"
.clearfix .clearfix
.pull-left .pull-left
= form_tag explore_groups_path, method: :get, class: 'form-inline form-tiny' do |f| = form_tag explore_groups_path, method: :get, class: 'form-inline form-tiny' do |f|
......
- page_title "Projects"
.clearfix .clearfix
= render 'filter' = render 'filter'
......
- page_title "Starred Projects"
.explore-trending-block .explore-trending-block
%p.lead %p.lead
%i.fa.fa-star %i.fa.fa-star
......
- page_title "Trending Projects"
.explore-title .explore-title
%h3 %h3
Explore GitLab Explore GitLab
......
%ul.sidebar-subnav
= nav_link(path: 'groups#edit') do
= link_to edit_group_path(@group), title: 'Group', data: {placement: 'right'} do
= icon('pencil-square-o')
%span
Group
= nav_link(path: 'groups#projects') do
= link_to projects_group_path(@group), title: 'Projects', data: {placement: 'right'} do
= icon('folder')
%span
Projects
- page_title "Settings"
.panel.panel-default .panel.panel-default
.panel-heading .panel-heading
%strong= @group.name %strong= @group.name
......
- page_title "Members"
- show_roles = should_user_see_group_roles?(current_user, @group) - show_roles = should_user_see_group_roles?(current_user, @group)
%h3.page-title %h3.page-title
......
- page_title "Issues"
= content_for :meta_tags do = content_for :meta_tags do
- if current_user - if current_user
= auto_discovery_link_tag(:atom, issues_group_url(@group, format: :atom, private_token: current_user.private_token), title: "#{@group.name} issues") = auto_discovery_link_tag(:atom, issues_group_url(@group, format: :atom, private_token: current_user.private_token), title: "#{@group.name} issues")
......
- page_title "Merge Requests"
%h3.page-title %h3.page-title
Merge Requests Merge Requests
......
- page_title "Milestones"
%h3.page-title %h3.page-title
Milestones Milestones
%span.pull-right #{@group_milestones.count} milestones %span.pull-right #{@group_milestones.count} milestones
......
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.
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