Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2020-06-22 12:08:47 +00:00
parent 5956978e1d
commit 6046a605fd
174 changed files with 1470 additions and 896 deletions

View file

@ -2,7 +2,6 @@
import { escape } from 'lodash'; import { escape } from 'lodash';
import { mapActions, mapGetters } from 'vuex'; import { mapActions, mapGetters } from 'vuex';
import { GlDeprecatedButton, GlTooltipDirective, GlLoadingIcon } from '@gitlab/ui'; import { GlDeprecatedButton, GlTooltipDirective, GlLoadingIcon } from '@gitlab/ui';
import { polyfillSticky } from '~/lib/utils/sticky';
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
import Icon from '~/vue_shared/components/icon.vue'; import Icon from '~/vue_shared/components/icon.vue';
import FileIcon from '~/vue_shared/components/file_icon.vue'; import FileIcon from '~/vue_shared/components/file_icon.vue';
@ -124,9 +123,6 @@ export default {
return s__('MRDiff|Show full file'); return s__('MRDiff|Show full file');
}, },
}, },
mounted() {
polyfillSticky(this.$refs.header);
},
methods: { methods: {
...mapActions('diffs', [ ...mapActions('diffs', [
'toggleFileDiscussions', 'toggleFileDiscussions',

View file

@ -88,4 +88,9 @@ export default class Editor {
updateOptions(options = {}) { updateOptions(options = {}) {
this.instance.updateOptions(options); this.instance.updateOptions(options);
} }
use(exts = []) {
const extensions = Array.isArray(exts) ? exts : [exts];
Object.assign(this, ...extensions);
}
} }

View file

@ -1,6 +1,6 @@
fragment Project on Snippet { fragment SnippetProject on Snippet {
project { project {
fullPath fullPath
webUrl webUrl
} }
} }

View file

@ -7,7 +7,7 @@ query GetSnippetQuery($ids: [ID!]) {
edges { edges {
node { node {
...SnippetBase ...SnippetBase
...Project ...SnippetProject
author { author {
...Author ...Author
} }

View file

@ -23,7 +23,6 @@ module ServiceParams
:comment_detail, :comment_detail,
:confidential_issues_events, :confidential_issues_events,
:default_irc_uri, :default_irc_uri,
:description,
:device, :device,
:disable_diffs, :disable_diffs,
:drone_url, :drone_url,
@ -61,7 +60,6 @@ module ServiceParams
:sound, :sound,
:subdomain, :subdomain,
:teamcity_url, :teamcity_url,
:title,
:token, :token,
:type, :type,
:url, :url,

View file

@ -0,0 +1,53 @@
# frozen_string_literal: true
module Snippets::BlobsActions
extend ActiveSupport::Concern
include Gitlab::Utils::StrongMemoize
include ExtractsRef
include Snippets::SendBlob
included do
before_action :authorize_read_snippet!, only: [:raw]
before_action :ensure_repository
before_action :ensure_blob
end
def raw
send_snippet_blob(snippet, blob)
end
private
def repository_container
snippet
end
# rubocop:disable Gitlab/ModuleWithInstanceVariables
def blob
strong_memoize(:blob) do
assign_ref_vars
next unless @commit
@repo.blob_at(@commit.id, @path)
end
end
# rubocop:enable Gitlab/ModuleWithInstanceVariables
def ensure_blob
render_404 unless blob
end
def ensure_repository
unless snippet.repo_exists?
Gitlab::AppLogger.error(message: "Snippet raw blob attempt with no repo", snippet: snippet.id)
respond_422
end
end
def snippet_id
params[:snippet_id]
end
end

View file

@ -0,0 +1,22 @@
# frozen_string_literal: true
module Snippets::SendBlob
include SendsBlob
def send_snippet_blob(snippet, blob)
workhorse_set_content_type!
send_blob(
snippet.repository,
blob,
inline: content_disposition == 'inline',
allow_caching: snippet.public?
)
end
private
def content_disposition
@disposition ||= params[:inline] == 'false' ? 'attachment' : 'inline'
end
end

View file

@ -2,11 +2,12 @@
module SnippetsActions module SnippetsActions
extend ActiveSupport::Concern extend ActiveSupport::Concern
include SendsBlob
include RendersNotes include RendersNotes
include RendersBlob include RendersBlob
include PaginatedCollection include PaginatedCollection
include Gitlab::NoteableMetadata include Gitlab::NoteableMetadata
include Snippets::SendBlob
included do included do
skip_before_action :verify_authenticity_token, skip_before_action :verify_authenticity_token,
@ -25,6 +26,10 @@ module SnippetsActions
render 'edit' render 'edit'
end end
# This endpoint is being replaced by Snippets::BlobController#raw
# Support for old raw links will be maintainted via this action but
# it will only return the first blob found,
# see: https://gitlab.com/gitlab-org/gitlab/-/issues/217775
def raw def raw
workhorse_set_content_type! workhorse_set_content_type!
@ -39,12 +44,7 @@ module SnippetsActions
filename: Snippet.sanitized_file_name(blob.name) filename: Snippet.sanitized_file_name(blob.name)
) )
else else
send_blob( send_snippet_blob(snippet, blob)
snippet.repository,
blob,
inline: content_disposition == 'inline',
allow_caching: snippet.public?
)
end end
end end
@ -106,10 +106,6 @@ module SnippetsActions
private private
def content_disposition
@disposition ||= params[:inline] == 'false' ? 'attachment' : 'inline'
end
# rubocop:disable Gitlab/ModuleWithInstanceVariables # rubocop:disable Gitlab/ModuleWithInstanceVariables
def blob def blob
return unless snippet return unless snippet

View file

@ -0,0 +1,5 @@
# frozen_string_literal: true
class Projects::Snippets::BlobsController < Projects::Snippets::ApplicationController
include Snippets::BlobsActions
end

View file

@ -15,7 +15,7 @@ class Projects::SnippetsController < Projects::Snippets::ApplicationController
before_action :authorize_admin_snippet!, only: [:destroy] before_action :authorize_admin_snippet!, only: [:destroy]
def index def index
@snippet_counts = Snippets::CountService @snippet_counts = ::Snippets::CountService
.new(current_user, project: @project) .new(current_user, project: @project)
.execute .execute
@ -35,7 +35,7 @@ class Projects::SnippetsController < Projects::Snippets::ApplicationController
def create def create
create_params = snippet_params.merge(spammable_params) create_params = snippet_params.merge(spammable_params)
service_response = Snippets::CreateService.new(project, current_user, create_params).execute service_response = ::Snippets::CreateService.new(project, current_user, create_params).execute
@snippet = service_response.payload[:snippet] @snippet = service_response.payload[:snippet]
handle_repository_error(:new) handle_repository_error(:new)

View file

@ -0,0 +1,7 @@
# frozen_string_literal: true
class Snippets::BlobsController < Snippets::ApplicationController
include Snippets::BlobsActions
skip_before_action :authenticate_user!, only: [:raw]
end

View file

@ -13,11 +13,10 @@ module Resolvers
def resolve(name: nil, **args) def resolve(name: nil, **args)
authorize!(project) authorize!(project)
response, start_cursor, end_cursor = jira_projects(name: name, **compute_pagination_params(args)) response = jira_projects(name: name)
end_cursor = nil if !!response.payload[:is_last]
if response.success? if response.success?
Gitlab::Graphql::ExternallyPaginatedArray.new(start_cursor, end_cursor, *response.payload[:projects]) response.payload[:projects]
else else
raise Gitlab::Graphql::Errors::BaseError, response.message raise Gitlab::Graphql::Errors::BaseError, response.message
end end
@ -35,41 +34,10 @@ module Resolvers
jira_service&.project jira_service&.project
end end
def compute_pagination_params(params) def jira_projects(name:)
after_cursor = Base64.decode64(params[:after].to_s) args = { query: name }.compact
before_cursor = Base64.decode64(params[:before].to_s)
# differentiate between 0 cursor and nil or invalid cursor that decodes into zero. return Jira::Requests::Projects.new(project.jira_service, args).execute
after_index = after_cursor.to_i == 0 && after_cursor != "0" ? nil : after_cursor.to_i
before_index = before_cursor.to_i == 0 && before_cursor != "0" ? nil : before_cursor.to_i
if after_index.present? && before_index.present?
if after_index >= before_index
{ start_at: 0, limit: 0 }
else
{ start_at: after_index + 1, limit: before_index - after_index - 1 }
end
elsif after_index.present?
{ start_at: after_index + 1, limit: nil }
elsif before_index.present?
{ start_at: 0, limit: before_index - 1 }
else
{ start_at: 0, limit: nil }
end
end
def jira_projects(name:, start_at:, limit:)
args = { query: name, start_at: start_at, limit: limit }.compact
response = Jira::Requests::Projects.new(project.jira_service, args).execute
return [response, nil, nil] if response.error?
projects = response.payload[:projects]
start_cursor = start_at == 0 ? nil : Base64.encode64((start_at - 1).to_s)
end_cursor = Base64.encode64((start_at + projects.size - 1).to_s)
[response, start_cursor, end_cursor]
end end
end end
end end

View file

@ -15,7 +15,7 @@ module Types
null: true, null: true,
connection: false, connection: false,
extensions: [Gitlab::Graphql::Extensions::ExternallyPaginatedArrayExtension], extensions: [Gitlab::Graphql::Extensions::ExternallyPaginatedArrayExtension],
description: 'List of Jira projects fetched through Jira REST API', description: 'List of all Jira projects fetched through Jira REST API',
resolver: Resolvers::Projects::JiraProjectsResolver resolver: Resolvers::Projects::JiraProjectsResolver
end end
end end

View file

@ -19,6 +19,7 @@ module Ci
before_create :set_build_project before_create :set_build_project
validates :build, presence: true validates :build, presence: true
validates :secrets, json_schema: { filename: 'build_metadata_secrets' }
serialize :config_options, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize serialize :config_options, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize
serialize :config_variables, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize serialize :config_variables, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize
@ -83,5 +84,3 @@ module Ci
end end
end end
end end
Ci::BuildMetadata.prepend_if_ee('EE::Ci::BuildMetadata')

View file

@ -3,11 +3,11 @@
class BugzillaService < IssueTrackerService class BugzillaService < IssueTrackerService
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated? validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
def default_title def title
'Bugzilla' 'Bugzilla'
end end
def default_description def description
s_('IssueTracker|Bugzilla issue tracker') s_('IssueTracker|Bugzilla issue tracker')
end end

View file

@ -3,11 +3,11 @@
class CustomIssueTrackerService < IssueTrackerService class CustomIssueTrackerService < IssueTrackerService
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated? validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
def default_title def title
'Custom Issue Tracker' 'Custom Issue Tracker'
end end
def default_description def description
s_('IssueTracker|Custom issue tracker') s_('IssueTracker|Custom issue tracker')
end end
@ -17,8 +17,6 @@ class CustomIssueTrackerService < IssueTrackerService
def fields def fields
[ [
{ type: 'text', name: 'title', placeholder: title },
{ type: 'text', name: 'description', placeholder: description },
{ type: 'text', name: 'project_url', placeholder: 'Project url', required: true }, { type: 'text', name: 'project_url', placeholder: 'Project url', required: true },
{ type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true }, { type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true },
{ type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true } { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true }

View file

@ -7,11 +7,11 @@ class GitlabIssueTrackerService < IssueTrackerService
default_value_for :default, true default_value_for :default, true
def default_title def title
'GitLab' 'GitLab'
end end
def default_description def description
s_('IssueTracker|GitLab issue tracker') s_('IssueTracker|GitLab issue tracker')
end end

View file

@ -25,28 +25,6 @@ class IssueTrackerService < Service
end end
end end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
def title
if title_attribute = read_attribute(:title)
title_attribute
elsif self.properties && self.properties['title'].present?
self.properties['title']
else
default_title
end
end
# this will be removed as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
def description
if description_attribute = read_attribute(:description)
description_attribute
elsif self.properties && self.properties['description'].present?
self.properties['description']
else
default_description
end
end
def handle_properties def handle_properties
# this has been moved from initialize_properties and should be improved # this has been moved from initialize_properties and should be improved
# as part of https://gitlab.com/gitlab-org/gitlab/issues/29404 # as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
@ -54,13 +32,6 @@ class IssueTrackerService < Service
@legacy_properties_data = properties.dup @legacy_properties_data = properties.dup
data_values = properties.slice!('title', 'description') data_values = properties.slice!('title', 'description')
properties.each do |key, _|
current_value = self.properties.delete(key)
value = attribute_changed?(key) ? attribute_change(key).last : current_value
write_attribute(key, value)
end
data_values.reject! { |key| data_fields.changed.include?(key) } data_values.reject! { |key| data_fields.changed.include?(key) }
data_values.slice!(*data_fields.attributes.keys) data_values.slice!(*data_fields.attributes.keys)
data_fields.assign_attributes(data_values) if data_values.present? data_fields.assign_attributes(data_values) if data_values.present?
@ -102,7 +73,6 @@ class IssueTrackerService < Service
def fields def fields
[ [
{ type: 'text', name: 'description', placeholder: description },
{ type: 'text', name: 'project_url', placeholder: 'Project url', required: true }, { type: 'text', name: 'project_url', placeholder: 'Project url', required: true },
{ type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true }, { type: 'text', name: 'issues_url', placeholder: 'Issue url', required: true },
{ type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true } { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true }
@ -117,8 +87,6 @@ class IssueTrackerService < Service
def set_default_data def set_default_data
return unless issues_tracker.present? return unless issues_tracker.present?
self.title ||= issues_tracker['title']
# we don't want to override if we have set something # we don't want to override if we have set something
return if project_url || issues_url || new_issue_url return if project_url || issues_url || new_issue_url

View file

@ -64,8 +64,6 @@ class JiraService < IssueTrackerService
def set_default_data def set_default_data
return unless issues_tracker.present? return unless issues_tracker.present?
self.title ||= issues_tracker['title']
return if url return if url
data_fields.url ||= issues_tracker['url'] data_fields.url ||= issues_tracker['url']
@ -103,11 +101,11 @@ class JiraService < IssueTrackerService
[Jira service documentation](#{help_page_url('user/project/integrations/jira')})." [Jira service documentation](#{help_page_url('user/project/integrations/jira')})."
end end
def default_title def title
'Jira' 'Jira'
end end
def default_description def description
s_('JiraService|Jira issue tracker') s_('JiraService|Jira issue tracker')
end end

View file

@ -3,11 +3,11 @@
class RedmineService < IssueTrackerService class RedmineService < IssueTrackerService
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated? validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
def default_title def title
'Redmine' 'Redmine'
end end
def default_description def description
s_('IssueTracker|Redmine issue tracker') s_('IssueTracker|Redmine issue tracker')
end end

View file

@ -12,11 +12,11 @@ class YoutrackService < IssueTrackerService
end end
end end
def default_title def title
'YouTrack' 'YouTrack'
end end
def default_description def description
s_('IssueTracker|YouTrack issue tracker') s_('IssueTracker|YouTrack issue tracker')
end end
@ -26,7 +26,6 @@ class YoutrackService < IssueTrackerService
def fields def fields
[ [
{ type: 'text', name: 'description', placeholder: description },
{ type: 'text', name: 'project_url', title: 'Project URL', placeholder: 'Project URL', required: true }, { type: 'text', name: 'project_url', title: 'Project URL', placeholder: 'Project URL', required: true },
{ type: 'text', name: 'issues_url', title: 'Issue URL', placeholder: 'Issue URL', required: true } { type: 'text', name: 'issues_url', title: 'Issue URL', placeholder: 'Issue URL', required: true }
] ]

View file

@ -7,6 +7,9 @@ class Service < ApplicationRecord
include Importable include Importable
include ProjectServicesLoggable include ProjectServicesLoggable
include DataFields include DataFields
include IgnorableColumns
ignore_columns %i[title description], remove_with: '13.4', remove_after: '2020-09-22'
SERVICE_NAMES = %w[ SERVICE_NAMES = %w[
alerts asana assembla bamboo bugzilla buildkite campfire custom_issue_tracker discord alerts asana assembla bamboo bugzilla buildkite campfire custom_issue_tracker discord

View file

@ -0,0 +1,9 @@
# frozen_string_literal: true
module GpgKeys
class DestroyService < Keys::BaseService
def execute(key)
key.destroy
end
end
end

View file

@ -5,22 +5,16 @@ module Jira
class Base class Base
include ProjectServicesLoggable include ProjectServicesLoggable
PER_PAGE = 50 attr_reader :jira_service, :project, :query
attr_reader :jira_service, :project, :limit, :start_at, :query def initialize(jira_service, query: nil)
def initialize(jira_service, limit: PER_PAGE, start_at: 0, query: nil)
@project = jira_service&.project @project = jira_service&.project
@jira_service = jira_service @jira_service = jira_service
@query = query
@limit = limit
@start_at = start_at
@query = query
end end
def execute def execute
return ServiceResponse.error(message: _('Jira service not configured.')) unless jira_service&.active? return ServiceResponse.error(message: _('Jira service not configured.')) unless jira_service&.active?
return ServiceResponse.success(payload: empty_payload) if limit.to_i <= 0
request request
end end

View file

@ -9,19 +9,24 @@ module Jira
override :url override :url
def url def url
'/rest/api/2/project/search?query=%{query}&maxResults=%{limit}&startAt=%{start_at}' % '/rest/api/2/project'
{ query: CGI.escape(query.to_s), limit: limit.to_i, start_at: start_at.to_i }
end end
override :build_service_response override :build_service_response
def build_service_response(response) def build_service_response(response)
return ServiceResponse.success(payload: empty_payload) unless response['values'].present? return ServiceResponse.success(payload: empty_payload) unless response.present?
ServiceResponse.success(payload: { projects: map_projects(response), is_last: response['isLast'] }) ServiceResponse.success(payload: { projects: map_projects(response), is_last: true })
end end
def map_projects(response) def map_projects(response)
response['values'].map { |v| JIRA::Resource::Project.build(client, v) } response.map { |v| JIRA::Resource::Project.build(client, v) }.select(&method(:match_query?))
end
def match_query?(jira_project)
query = self.query.to_s.downcase
jira_project&.key&.downcase&.include?(query) || jira_project&.name&.downcase&.include?(query)
end end
def empty_payload def empty_payload

View file

@ -1,4 +1,4 @@
- page_title "Appearance" - page_title _("Appearance")
- @content_class = "limit-container-width" unless fluid_layout - @content_class = "limit-container-width" unless fluid_layout
= render 'form' = render 'form'

View file

@ -1,6 +1,6 @@
- add_to_breadcrumbs "Applications", admin_applications_path - add_to_breadcrumbs _("Applications"), admin_applications_path
- breadcrumb_title @application.name - breadcrumb_title @application.name
- page_title "Edit", @application.name, "Applications" - 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)

View file

@ -1,4 +1,4 @@
- page_title "Applications" - page_title _("Applications")
%h3.page-title %h3.page-title
System OAuth applications System OAuth applications
%p.light %p.light

View file

@ -1,5 +1,5 @@
- breadcrumb_title "Applications" - breadcrumb_title _("Applications")
- page_title "New Application" - page_title _("New Application")
%h3.page-title New application %h3.page-title New application
- @url = admin_applications_path - @url = admin_applications_path

View file

@ -1,4 +1,4 @@
- page_title @application.name, "Applications" - page_title @application.name, _("Applications")
%h3.page-title %h3.page-title
Application: #{@application.name} Application: #{@application.name}

View file

@ -1,4 +1,4 @@
- page_title "Background Jobs" - 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

View file

@ -1,4 +1,4 @@
- breadcrumb_title "Messages" - breadcrumb_title _("Messages")
- page_title "Broadcast Messages" - page_title _("Broadcast Messages")
= render 'form' = render 'form'

View file

@ -1,5 +1,5 @@
- breadcrumb_title "Messages" - breadcrumb_title _("Messages")
- page_title "Broadcast Messages" - page_title _("Broadcast Messages")
%h3.page-title %h3.page-title
Broadcast Messages Broadcast Messages

View file

@ -1,4 +1,5 @@
- breadcrumb_title "Dashboard" - breadcrumb_title _("Dashboard")
- page_title _("Dashboard")
- if show_license_breakdown? - if show_license_breakdown?
= render_if_exists 'admin/licenses/breakdown', license: @license = render_if_exists 'admin/licenses/breakdown', license: @license

View file

@ -1,4 +1,4 @@
- page_title 'New Deploy Key' - page_title _('New Deploy Key')
%h3.page-title New public deploy key %h3.page-title New public deploy key
%hr %hr

View file

@ -1,4 +1,5 @@
- breadcrumb_title _("Gitaly Servers") - breadcrumb_title _("Gitaly Servers")
- page_title _("Gitaly Servers")
%h3.page-title= _("Gitaly Servers") %h3.page-title= _("Gitaly Servers")
%hr %hr

View file

@ -1,4 +1,4 @@
- page_title 'Request details' - page_title _('Request details')
%h3.page-title %h3.page-title
Request details Request details

View file

@ -1,4 +1,5 @@
- breadcrumb_title "Jobs" - breadcrumb_title _("Jobs")
- page_title _("Jobs")
.top-area.scrolling-tabs-container.inner-page-scroll-tabs .top-area.scrolling-tabs-container.inner-page-scroll-tabs
- build_path_proc = ->(scope) { admin_jobs_path(scope: scope) } - build_path_proc = ->(scope) { admin_jobs_path(scope: scope) }

View file

@ -1,2 +1,2 @@
- page_title @key.title, "Keys" - page_title @key.title, _("Keys")
= render "profiles/keys/key_details", admin: true = render "profiles/keys/key_details", admin: true

View file

@ -1,6 +1,6 @@
- add_to_breadcrumbs "Projects", admin_projects_path - add_to_breadcrumbs _("Projects"), admin_projects_path
- breadcrumb_title @project.full_name - breadcrumb_title @project.full_name
- page_title @project.full_name, "Projects" - page_title @project.full_name, _("Projects")
- @content_class = "admin-projects" - @content_class = "admin-projects"
%h3.page-title %h3.page-title

View file

@ -1,4 +1,4 @@
- page_title 'Requests Profiles' - page_title _('Requests Profiles')
%h3.page-title %h3.page-title
= page_title = page_title

View file

@ -1,4 +1,5 @@
- breadcrumb_title _('Runners') - breadcrumb_title _('Runners')
- page_title _('Runners')
.row .row
.col-sm-6 .col-sm-6

View file

@ -9,6 +9,7 @@
%span.runner-state.runner-state-specific %span.runner-state.runner-state-specific
Specific Specific
- page_title _("Runners")
- add_to_breadcrumbs _("Runners"), admin_runners_path - add_to_breadcrumbs _("Runners"), admin_runners_path
- breadcrumb_title "##{@runner.id}" - breadcrumb_title "##{@runner.id}"

View file

@ -1,6 +1,6 @@
- add_to_breadcrumbs "Service Templates", admin_application_settings_services_path - add_to_breadcrumbs _("Service Templates"), admin_application_settings_services_path
- page_title @service.title, _("Service Templates")
- breadcrumb_title @service.title - breadcrumb_title @service.title
- page_title @service.title, "Service Templates"
- @content_class = 'limit-container-width' unless fluid_layout - @content_class = 'limit-container-width' unless fluid_layout
= render 'form' = render 'form'

View file

@ -1,4 +1,4 @@
- page_title "Service Templates" - page_title _("Service Templates")
%h3.page-title Service templates %h3.page-title Service templates
%p.light= s_('AdminSettings|Service template allows you to set default values for integrations') %p.light= s_('AdminSettings|Service template allows you to set default values for integrations')

View file

@ -1,4 +1,4 @@
- page_title "Spam Logs" - page_title _("Spam Logs")
%h3.page-title Spam Logs %h3.page-title Spam Logs
%hr %hr
- if @spam_logs.present? - if @spam_logs.present?

View file

@ -1,4 +1,4 @@
- page_title "Edit", @user.name, "Users" - page_title _("Edit"), @user.name, _("Users")
%h3.page-title %h3.page-title
Edit user: #{@user.name} Edit user: #{@user.name}
%hr %hr

View file

@ -1,4 +1,4 @@
- page_title "Users" - page_title _("Users")
.top-area.scrolling-tabs-container.inner-page-scroll-tabs .top-area.scrolling-tabs-container.inner-page-scroll-tabs
.fade-left .fade-left

View file

@ -1,5 +1,5 @@
- add_to_breadcrumbs "Users", admin_users_path - add_to_breadcrumbs _("Users"), admin_users_path
- breadcrumb_title @user.name - breadcrumb_title @user.name
- page_title "SSH Keys", @user.name, "Users" - page_title _("SSH Keys"), @user.name, _("Users")
= render 'admin/users/head' = render 'admin/users/head'
= render 'profiles/keys/key_table', admin: true = render 'profiles/keys/key_table', admin: true

View file

@ -1,4 +1,4 @@
- page_title "New User" - page_title _("New User")
%h3.page-title %h3.page-title
New user New user
%hr %hr

View file

@ -1,6 +1,6 @@
- add_to_breadcrumbs "Users", admin_users_path - add_to_breadcrumbs _("Users"), admin_users_path
- breadcrumb_title @user.name - breadcrumb_title @user.name
- page_title "Groups and projects", @user.name, "Users" - page_title _("Groups and projects"), @user.name, _("Users")
= render 'admin/users/head' = render 'admin/users/head'
- if @user.groups.any? - if @user.groups.any?

View file

@ -1,6 +1,6 @@
- add_to_breadcrumbs "Users", admin_users_path - add_to_breadcrumbs _("Users"), admin_users_path
- breadcrumb_title @user.name - breadcrumb_title @user.name
- page_title @user.name, "Users" - page_title @user.name, _("Users")
= render 'admin/users/head' = render 'admin/users/head'
.row .row

View file

@ -5,8 +5,8 @@
= render_dashboard_gold_trial(current_user) = render_dashboard_gold_trial(current_user)
- page_title "Activity" - page_title _("Activity")
- header_title "Activity", activity_dashboard_path - header_title _("Activity"), activity_dashboard_path
= render "projects/last_push" = render "projects/last_push"
= render 'dashboard/activity_head' = render 'dashboard/activity_head'

View file

@ -1,6 +1,6 @@
- @hide_top_links = true - @hide_top_links = true
- page_title "Groups" - page_title _("Groups")
- header_title "Groups", dashboard_groups_path - header_title _("Groups"), dashboard_groups_path
= render_dashboard_gold_trial(current_user) = render_dashboard_gold_trial(current_user)
= render 'dashboard/groups_head' = render 'dashboard/groups_head'

View file

@ -1,6 +1,6 @@
- @hide_top_links = true - @hide_top_links = true
- page_title 'Milestones' - page_title _('Milestones')
- header_title 'Milestones', dashboard_milestones_path - header_title _('Milestones'), dashboard_milestones_path
.page-title-holder.d-flex.align-items-center .page-title-holder.d-flex.align-items-center
%h1.page-title= _('Milestones') %h1.page-title= _('Milestones')

View file

@ -5,8 +5,8 @@
= render_dashboard_gold_trial(current_user) = render_dashboard_gold_trial(current_user)
- page_title "Projects" - page_title _("Projects")
- header_title "Projects", dashboard_projects_path - header_title _("Projects"), dashboard_projects_path
= render "projects/last_push" = render "projects/last_push"
- if show_projects?(@projects, params) - if show_projects?(@projects, params)

View file

@ -1,6 +1,6 @@
- @hide_top_links = true - @hide_top_links = true
- page_title "Snippets" - page_title _("Snippets")
- header_title "Snippets", dashboard_snippets_path - header_title _("Snippets"), dashboard_snippets_path
- button_path = new_snippet_path if can?(current_user, :create_snippet) - button_path = new_snippet_path if can?(current_user, :create_snippet)
= render 'dashboard/snippets_head' = render 'dashboard/snippets_head'

View file

@ -1,6 +1,6 @@
- @hide_top_links = true - @hide_top_links = true
- page_title "To-Do List" - page_title _("To-Do List")
- header_title "To-Do List", dashboard_todos_path - header_title _("To-Do List"), dashboard_todos_path
= render_dashboard_gold_trial(current_user) = render_dashboard_gold_trial(current_user)

View file

@ -1,4 +1,4 @@
- page_title "Sign up" - page_title _("Sign up")
- if experiment_enabled?(:signup_flow) - if experiment_enabled?(:signup_flow)
.row .row
.col-lg-7 .col-lg-7

View file

@ -1,4 +1,4 @@
- page_title "Sign in" - page_title _("Sign in")
#signin-container #signin-container
- if any_form_based_providers_enabled? - if any_form_based_providers_enabled?

View file

@ -1,6 +1,6 @@
- @hide_top_links = true - @hide_top_links = true
- page_title "Snippets" - page_title _("Snippets")
- header_title "Snippets", snippets_path - header_title _("Snippets"), snippets_path
- if current_user - if current_user
= render 'dashboard/snippets_head' = render 'dashboard/snippets_head'

View file

@ -1,7 +1,7 @@
= content_for :meta_tags do = content_for :meta_tags do
= auto_discovery_link_tag(:atom, group_url(@group, rss_url_options), title: "#{@group.name} activity") = auto_discovery_link_tag(:atom, group_url(@group, rss_url_options), title: "#{@group.name} activity")
- page_title "Activity" - page_title _("Activity")
%section.activities %section.activities
= render 'activities' = render 'activities'

View file

@ -1,4 +1,5 @@
- breadcrumb_title _("General Settings") - breadcrumb_title _("General Settings")
- page_title _("General Settings")
- @content_class = "limit-container-width" unless fluid_layout - @content_class = "limit-container-width" unless fluid_layout
- expanded = expanded_by_default? - expanded = expanded_by_default?

View file

@ -1,6 +1,6 @@
- @can_bulk_update = can?(current_user, :admin_issue, @group) && @group.feature_available?(:group_bulk_edit) - @can_bulk_update = can?(current_user, :admin_issue, @group) && @group.feature_available?(:group_bulk_edit)
- page_title "Issues" - page_title _("Issues")
= content_for :meta_tags do = content_for :meta_tags do
= auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{@group.name} issues") = auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{@group.name} issues")

View file

@ -1,6 +1,6 @@
- add_to_breadcrumbs _("Labels"), group_labels_path(@group) - add_to_breadcrumbs _("Labels"), group_labels_path(@group)
- breadcrumb_title _("Edit") - breadcrumb_title _("Edit")
- page_title "Edit", @label.name, _("Labels") - page_title _("Edit"), @label.name, _("Labels")
%h3.page-title %h3.page-title
Edit Label Edit Label

View file

@ -1,4 +1,4 @@
- page_title 'Labels' - page_title _('Labels')
- can_admin_label = can?(current_user, :admin_label, @group) - can_admin_label = can?(current_user, :admin_label, @group)
- search = params[:search] - search = params[:search]
- subscribed = params[:subscribed] - subscribed = params[:subscribed]

View file

@ -1,6 +1,6 @@
- @can_bulk_update = can?(current_user, :admin_merge_request, @group) && @group.feature_available?(:group_bulk_edit) - @can_bulk_update = can?(current_user, :admin_merge_request, @group) && @group.feature_available?(:group_bulk_edit)
- page_title "Merge Requests" - page_title _("Merge Requests")
- if group_merge_requests_count(state: 'all').zero? - if group_merge_requests_count(state: 'all').zero?
= render 'shared/empty_states/merge_requests', project_select_button: true = render 'shared/empty_states/merge_requests', project_select_button: true

View file

@ -1,4 +1,4 @@
- page_title "Milestones" - page_title _("Milestones")
.top-area .top-area
= render 'shared/milestones_filter', counts: @milestone_states = render 'shared/milestones_filter', counts: @milestone_states

View file

@ -1,4 +1,5 @@
- breadcrumb_title "Projects" - breadcrumb_title _("Projects")
- page_title _("Projects")
.card.prepend-top-default .card.prepend-top-default
.card-header .card-header

View file

@ -1,5 +1,5 @@
- breadcrumb_title "CI / CD Settings" - breadcrumb_title _("CI / CD Settings")
- page_title "CI / CD" - page_title _("CI / CD")
- expanded = expanded_by_default? - expanded = expanded_by_default?
- general_expanded = @group.errors.empty? ? expanded : true - general_expanded = @group.errors.empty? ? expanded : true

View file

@ -1,4 +1,5 @@
- breadcrumb_title _("Details") - breadcrumb_title _("Details")
- page_title _("Groups")
- @content_class = "limit-container-width" unless fluid_layout - @content_class = "limit-container-width" unless fluid_layout
= content_for :meta_tags do = content_for :meta_tags do

View file

@ -1,4 +1,4 @@
- page_title 'Instance Configuration' - page_title _('Instance Configuration')
.documentation.md .documentation.md
%h1 Instance Configuration %h1 Instance Configuration

View file

@ -1,4 +1,4 @@
- page_title "UI Development Kit", "Help" - page_title _("UI Development Kit"), _("Help")
- lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fermentum nisi sapien, non consequat lectus aliquam ultrices. Suspendisse sodales est euismod nunc condimentum, a consectetur diam ornare." - lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fermentum nisi sapien, non consequat lectus aliquam ultrices. Suspendisse sodales est euismod nunc condimentum, a consectetur diam ornare."
- link_classes = "flex-grow-1 mx-1 " - link_classes = "flex-grow-1 mx-1 "

View file

@ -1,5 +1,5 @@
- @body_class = 'ide-layout' - @body_class = 'ide-layout'
- page_title 'IDE' - page_title _('IDE')
- content_for :page_specific_javascripts do - content_for :page_specific_javascripts do
= stylesheet_link_tag 'page_bundles/ide' = stylesheet_link_tag 'page_bundles/ide'

View file

@ -1,7 +1,7 @@
- title = _('Bitbucket Server Import') - title = _('Bitbucket Server Import')
- page_title title - page_title title
- breadcrumb_title title - breadcrumb_title title
- header_title "Projects", root_path - header_title _("Projects"), root_path
%h3.page-title %h3.page-title
= icon 'bitbucket-square', text: _('Import repositories from Bitbucket Server') = icon 'bitbucket-square', text: _('Import repositories from Bitbucket Server')

View file

@ -1,5 +1,5 @@
- page_title 'Bitbucket Server import' - page_title _('Bitbucket Server import')
- header_title 'Projects', root_path - header_title _('Projects'), root_path
%h3.page-title %h3.page-title
%i.fa.fa-bitbucket-square %i.fa.fa-bitbucket-square

View file

@ -1,5 +1,5 @@
- page_title "Manifest file import" - page_title _("Manifest file import")
- header_title "Projects", root_path - header_title _("Projects"), root_path
%h3.page-title %h3.page-title
= _('Manifest file import') = _('Manifest file import')

View file

@ -1,5 +1,5 @@
- page_title "Manifest import" - page_title _("Manifest import")
- header_title "Projects", root_path - header_title _("Projects"), root_path
- provider = 'manifest' - provider = 'manifest'
%h3.page-title %h3.page-title

View file

@ -1,4 +1,5 @@
- breadcrumb_title _("Cohorts") - breadcrumb_title _("Cohorts")
- page_title _("Cohorts")
- if @cohorts - if @cohorts
= render 'cohorts_table' = render 'cohorts_table'

View file

@ -15,6 +15,7 @@
%li= link_to _('New project'), new_project_path(namespace_id: @group.id) %li= link_to _('New project'), new_project_path(namespace_id: @group.id)
- if create_group_subgroup - if create_group_subgroup
%li= link_to _('New subgroup'), new_group_path(parent_id: @group.id) %li= link_to _('New subgroup'), new_group_path(parent_id: @group.id)
= render_if_exists 'layouts/header/create_epic_new_dropdown_item'
%li.divider %li.divider
%li.dropdown-bold-header GitLab %li.dropdown-bold-header GitLab

View file

@ -1,3 +1,4 @@
- page_title _("Snippets")
- header_title _("Snippets"), snippets_path - header_title _("Snippets"), snippets_path
- snippets_upload_path = snippets_upload_path(@snippet, current_user) - snippets_upload_path = snippets_upload_path(@snippet, current_user)

View file

@ -1,4 +1,5 @@
- breadcrumb_title s_("Profiles|Edit Profile") - breadcrumb_title s_("Profiles|Edit Profile")
- page_title s_("Profiles|Edit Profile")
- @content_class = "limit-container-width" unless fluid_layout - @content_class = "limit-container-width" unless fluid_layout
- gravatar_link = link_to Gitlab.config.gravatar.host, 'https://' + Gitlab.config.gravatar.host - gravatar_link = link_to Gitlab.config.gravatar.host, 'https://' + Gitlab.config.gravatar.host

View file

@ -1,5 +1,5 @@
- breadcrumb_title _('Artifacts') - breadcrumb_title _('Artifacts')
- page_title @path.presence, 'Artifacts', "#{@build.name} (##{@build.id})", 'Jobs' - page_title @path.presence, _('Artifacts'), "#{@build.name} (##{@build.id})", _('Jobs')
= render "projects/jobs/header" = render "projects/jobs/header"

View file

@ -1,4 +1,4 @@
- page_title @path, 'Artifacts', "#{@build.name} (##{@build.id})", 'Jobs' - page_title @path, _('Artifacts'), "#{@build.name} (##{@build.id})", _('Jobs')
= render "projects/jobs/header" = render "projects/jobs/header"

View file

@ -1,4 +1,4 @@
- page_title "Blame", @blob.path, @ref - page_title _("Blame"), @blob.path, @ref
- link_icon = icon("link") - link_icon = icon("link")
#blob-content-holder.tree-holder #blob-content-holder.tree-holder

View file

@ -1,5 +1,5 @@
- breadcrumb_title "Repository" - breadcrumb_title _("Repository")
- page_title "Edit", @blob.path, @ref - page_title _("Edit"), @blob.path, @ref
- unless Feature.enabled?(:monaco_blobs) - unless Feature.enabled?(:monaco_blobs)
- content_for :page_specific_javascripts do - content_for :page_specific_javascripts do
= page_specific_javascript_tag('lib/ace.js') = page_specific_javascript_tag('lib/ace.js')

View file

@ -1,5 +1,5 @@
- breadcrumb_title "Repository" - breadcrumb_title _("Repository")
- page_title "New File", @path.presence, @ref - page_title _("New File"), @path.presence, @ref
- unless Feature.enabled?(:monaco_blobs) - unless Feature.enabled?(:monaco_blobs)
- content_for :page_specific_javascripts do - content_for :page_specific_javascripts do
= page_specific_javascript_tag('lib/ace.js') = page_specific_javascript_tag('lib/ace.js')

View file

@ -1,4 +1,4 @@
- page_title "New Branch" - page_title _("New Branch")
- default_ref = params[:ref] || @project.default_branch - default_ref = params[:ref] || @project.default_branch
- if @error - if @error

View file

@ -1,5 +1,5 @@
- breadcrumb_title "Compare Revisions" - breadcrumb_title _("Compare Revisions")
- page_title "Compare" - page_title _("Compare")
%h3.page-title %h3.page-title
= _("Compare Git revisions") = _("Compare Git revisions")

View file

@ -1,4 +1,4 @@
- page_title "Value Stream Analytics" - page_title _("Value Stream Analytics")
#cycle-analytics{ "v-cloak" => "true", data: { request_path: project_cycle_analytics_path(@project) } } #cycle-analytics{ "v-cloak" => "true", data: { request_path: project_cycle_analytics_path(@project) } }
- if @cycle_analytics_no_data - if @cycle_analytics_no_data

View file

@ -1,4 +1,4 @@
- page_title 'Edit Deploy Key' - page_title _('Edit Deploy Key')
%h3.page-title= _('Edit Deploy Key') %h3.page-title= _('Edit Deploy Key')
%hr %hr

View file

@ -1,5 +1,6 @@
- @content_class = "limit-container-width" unless fluid_layout - @content_class = "limit-container-width" unless fluid_layout
- breadcrumb_title _("Details") - breadcrumb_title _("Details")
- page_title _("Details")
= render partial: 'flash_messages', locals: { project: @project } = render partial: 'flash_messages', locals: { project: @project }

View file

@ -1,4 +1,4 @@
- page_title "Find File", @ref - page_title _("Find File"), @ref
.file-finder-holder.tree-holder.clearfix.js-file-finder{ 'data-file-find-url': "#{escape_javascript(project_files_path(@project, @ref, format: :json))}", 'data-find-tree-url': escape_javascript(project_tree_path(@project, @ref)), 'data-blob-url-template': escape_javascript(project_blob_path(@project, @id || @commit.id)) } .file-finder-holder.tree-holder.clearfix.js-file-finder{ 'data-file-find-url': "#{escape_javascript(project_files_path(@project, @ref, format: :json))}", 'data-find-tree-url': escape_javascript(project_tree_path(@project, @ref)), 'data-blob-url-template': escape_javascript(project_blob_path(@project, @id || @commit.id)) }
.nav-block .nav-block

View file

@ -1,4 +1,4 @@
- page_title "Import repository" - page_title _("Import repository")
%h3.page-title %h3.page-title
Import repository Import repository

View file

@ -1,4 +1,4 @@
- page_title "Edit", "#{@issue.title} (#{@issue.to_reference})", "Issues" - page_title _("Edit"), "#{@issue.title} (#{@issue.to_reference})", _("Issues")
%h3.page-title %h3.page-title
Edit Issue ##{@issue.iid} Edit Issue ##{@issue.iid}

View file

@ -1,6 +1,6 @@
- @can_bulk_update = can?(current_user, :admin_issue, @project) - @can_bulk_update = can?(current_user, :admin_issue, @project)
- page_title "Issues" - page_title _("Issues")
- new_issue_email = @project.new_issuable_address(current_user, 'issue') - new_issue_email = @project.new_issuable_address(current_user, 'issue')
= content_for :meta_tags do = content_for :meta_tags do

View file

@ -1,4 +1,4 @@
- page_title "Jobs" - page_title _("Jobs")
.top-area .top-area
- build_path_proc = ->(scope) { project_jobs_path(@project, scope: scope) } - build_path_proc = ->(scope) { project_jobs_path(@project, scope: scope) }

View file

@ -1,7 +1,7 @@
- add_to_breadcrumbs 'Jobs', project_jobs_path(@project) - add_to_breadcrumbs _('Jobs'), project_jobs_path(@project)
- add_to_breadcrumbs "##{@build.id}", project_job_path(@project, @build) - add_to_breadcrumbs "##{@build.id}", project_job_path(@project, @build)
- breadcrumb_title 'Terminal' - breadcrumb_title _('Terminal')
- page_title 'Terminal', "#{@build.name} (##{@build.id})", 'Jobs' - page_title _('Terminal'), "#{@build.name} (##{@build.id})", _('Jobs')
- content_for :page_specific_javascripts do - content_for :page_specific_javascripts do
= stylesheet_link_tag "xterm.css" = stylesheet_link_tag "xterm.css"

View file

@ -1,6 +1,6 @@
- add_to_breadcrumbs "Labels", project_labels_path(@project) - add_to_breadcrumbs _("Labels"), project_labels_path(@project)
- breadcrumb_title "Edit" - breadcrumb_title _("Edit")
- page_title "Edit", @label.name, "Labels" - page_title _("Edit"), @label.name, _("Labels")
%h3.page-title %h3.page-title
Edit Label Edit Label

View file

@ -1,4 +1,4 @@
- page_title "Labels" - page_title _("Labels")
- can_admin_label = can?(current_user, :admin_label, @project) - can_admin_label = can?(current_user, :admin_label, @project)
- search = params[:search] - search = params[:search]
- subscribed = params[:subscribed] - subscribed = params[:subscribed]

Some files were not shown because too many files have changed in this diff Show more