Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
5956978e1d
commit
6046a605fd
174 changed files with 1470 additions and 896 deletions
|
@ -2,7 +2,6 @@
|
|||
import { escape } from 'lodash';
|
||||
import { mapActions, mapGetters } from 'vuex';
|
||||
import { GlDeprecatedButton, GlTooltipDirective, GlLoadingIcon } from '@gitlab/ui';
|
||||
import { polyfillSticky } from '~/lib/utils/sticky';
|
||||
import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
|
||||
import Icon from '~/vue_shared/components/icon.vue';
|
||||
import FileIcon from '~/vue_shared/components/file_icon.vue';
|
||||
|
@ -124,9 +123,6 @@ export default {
|
|||
return s__('MRDiff|Show full file');
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
polyfillSticky(this.$refs.header);
|
||||
},
|
||||
methods: {
|
||||
...mapActions('diffs', [
|
||||
'toggleFileDiscussions',
|
||||
|
|
|
@ -88,4 +88,9 @@ export default class Editor {
|
|||
updateOptions(options = {}) {
|
||||
this.instance.updateOptions(options);
|
||||
}
|
||||
|
||||
use(exts = []) {
|
||||
const extensions = Array.isArray(exts) ? exts : [exts];
|
||||
Object.assign(this, ...extensions);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
fragment Project on Snippet {
|
||||
fragment SnippetProject on Snippet {
|
||||
project {
|
||||
fullPath
|
||||
webUrl
|
||||
|
|
|
@ -7,7 +7,7 @@ query GetSnippetQuery($ids: [ID!]) {
|
|||
edges {
|
||||
node {
|
||||
...SnippetBase
|
||||
...Project
|
||||
...SnippetProject
|
||||
author {
|
||||
...Author
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ module ServiceParams
|
|||
:comment_detail,
|
||||
:confidential_issues_events,
|
||||
:default_irc_uri,
|
||||
:description,
|
||||
:device,
|
||||
:disable_diffs,
|
||||
:drone_url,
|
||||
|
@ -61,7 +60,6 @@ module ServiceParams
|
|||
:sound,
|
||||
:subdomain,
|
||||
:teamcity_url,
|
||||
:title,
|
||||
:token,
|
||||
:type,
|
||||
:url,
|
||||
|
|
53
app/controllers/concerns/snippets/blobs_actions.rb
Normal file
53
app/controllers/concerns/snippets/blobs_actions.rb
Normal 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
|
22
app/controllers/concerns/snippets/send_blob.rb
Normal file
22
app/controllers/concerns/snippets/send_blob.rb
Normal 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
|
|
@ -2,11 +2,12 @@
|
|||
|
||||
module SnippetsActions
|
||||
extend ActiveSupport::Concern
|
||||
include SendsBlob
|
||||
|
||||
include RendersNotes
|
||||
include RendersBlob
|
||||
include PaginatedCollection
|
||||
include Gitlab::NoteableMetadata
|
||||
include Snippets::SendBlob
|
||||
|
||||
included do
|
||||
skip_before_action :verify_authenticity_token,
|
||||
|
@ -25,6 +26,10 @@ module SnippetsActions
|
|||
render 'edit'
|
||||
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
|
||||
workhorse_set_content_type!
|
||||
|
||||
|
@ -39,12 +44,7 @@ module SnippetsActions
|
|||
filename: Snippet.sanitized_file_name(blob.name)
|
||||
)
|
||||
else
|
||||
send_blob(
|
||||
snippet.repository,
|
||||
blob,
|
||||
inline: content_disposition == 'inline',
|
||||
allow_caching: snippet.public?
|
||||
)
|
||||
send_snippet_blob(snippet, blob)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -106,10 +106,6 @@ module SnippetsActions
|
|||
|
||||
private
|
||||
|
||||
def content_disposition
|
||||
@disposition ||= params[:inline] == 'false' ? 'attachment' : 'inline'
|
||||
end
|
||||
|
||||
# rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
def blob
|
||||
return unless snippet
|
||||
|
|
5
app/controllers/projects/snippets/blobs_controller.rb
Normal file
5
app/controllers/projects/snippets/blobs_controller.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Projects::Snippets::BlobsController < Projects::Snippets::ApplicationController
|
||||
include Snippets::BlobsActions
|
||||
end
|
|
@ -15,7 +15,7 @@ class Projects::SnippetsController < Projects::Snippets::ApplicationController
|
|||
before_action :authorize_admin_snippet!, only: [:destroy]
|
||||
|
||||
def index
|
||||
@snippet_counts = Snippets::CountService
|
||||
@snippet_counts = ::Snippets::CountService
|
||||
.new(current_user, project: @project)
|
||||
.execute
|
||||
|
||||
|
@ -35,7 +35,7 @@ class Projects::SnippetsController < Projects::Snippets::ApplicationController
|
|||
|
||||
def create
|
||||
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]
|
||||
|
||||
handle_repository_error(:new)
|
||||
|
|
7
app/controllers/snippets/blobs_controller.rb
Normal file
7
app/controllers/snippets/blobs_controller.rb
Normal 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
|
|
@ -13,11 +13,10 @@ module Resolvers
|
|||
def resolve(name: nil, **args)
|
||||
authorize!(project)
|
||||
|
||||
response, start_cursor, end_cursor = jira_projects(name: name, **compute_pagination_params(args))
|
||||
end_cursor = nil if !!response.payload[:is_last]
|
||||
response = jira_projects(name: name)
|
||||
|
||||
if response.success?
|
||||
Gitlab::Graphql::ExternallyPaginatedArray.new(start_cursor, end_cursor, *response.payload[:projects])
|
||||
response.payload[:projects]
|
||||
else
|
||||
raise Gitlab::Graphql::Errors::BaseError, response.message
|
||||
end
|
||||
|
@ -35,41 +34,10 @@ module Resolvers
|
|||
jira_service&.project
|
||||
end
|
||||
|
||||
def compute_pagination_params(params)
|
||||
after_cursor = Base64.decode64(params[:after].to_s)
|
||||
before_cursor = Base64.decode64(params[:before].to_s)
|
||||
def jira_projects(name:)
|
||||
args = { query: name }.compact
|
||||
|
||||
# differentiate between 0 cursor and nil or invalid cursor that decodes into zero.
|
||||
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]
|
||||
return Jira::Requests::Projects.new(project.jira_service, args).execute
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,7 +15,7 @@ module Types
|
|||
null: true,
|
||||
connection: false,
|
||||
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
|
||||
end
|
||||
end
|
||||
|
|
|
@ -19,6 +19,7 @@ module Ci
|
|||
before_create :set_build_project
|
||||
|
||||
validates :build, presence: true
|
||||
validates :secrets, json_schema: { filename: 'build_metadata_secrets' }
|
||||
|
||||
serialize :config_options, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize
|
||||
serialize :config_variables, Serializers::JSON # rubocop:disable Cop/ActiveRecordSerialize
|
||||
|
@ -83,5 +84,3 @@ module Ci
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
Ci::BuildMetadata.prepend_if_ee('EE::Ci::BuildMetadata')
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
class BugzillaService < IssueTrackerService
|
||||
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
|
||||
|
||||
def default_title
|
||||
def title
|
||||
'Bugzilla'
|
||||
end
|
||||
|
||||
def default_description
|
||||
def description
|
||||
s_('IssueTracker|Bugzilla issue tracker')
|
||||
end
|
||||
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
class CustomIssueTrackerService < IssueTrackerService
|
||||
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
|
||||
|
||||
def default_title
|
||||
def title
|
||||
'Custom Issue Tracker'
|
||||
end
|
||||
|
||||
def default_description
|
||||
def description
|
||||
s_('IssueTracker|Custom issue tracker')
|
||||
end
|
||||
|
||||
|
@ -17,8 +17,6 @@ class CustomIssueTrackerService < IssueTrackerService
|
|||
|
||||
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: 'issues_url', placeholder: 'Issue url', required: true },
|
||||
{ type: 'text', name: 'new_issue_url', placeholder: 'New Issue url', required: true }
|
||||
|
|
|
@ -7,11 +7,11 @@ class GitlabIssueTrackerService < IssueTrackerService
|
|||
|
||||
default_value_for :default, true
|
||||
|
||||
def default_title
|
||||
def title
|
||||
'GitLab'
|
||||
end
|
||||
|
||||
def default_description
|
||||
def description
|
||||
s_('IssueTracker|GitLab issue tracker')
|
||||
end
|
||||
|
||||
|
|
|
@ -25,28 +25,6 @@ class IssueTrackerService < Service
|
|||
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
|
||||
# this has been moved from initialize_properties and should be improved
|
||||
# as part of https://gitlab.com/gitlab-org/gitlab/issues/29404
|
||||
|
@ -54,13 +32,6 @@ class IssueTrackerService < Service
|
|||
|
||||
@legacy_properties_data = properties.dup
|
||||
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.slice!(*data_fields.attributes.keys)
|
||||
data_fields.assign_attributes(data_values) if data_values.present?
|
||||
|
@ -102,7 +73,6 @@ class IssueTrackerService < Service
|
|||
|
||||
def fields
|
||||
[
|
||||
{ type: 'text', name: 'description', placeholder: description },
|
||||
{ type: 'text', name: 'project_url', placeholder: 'Project 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 }
|
||||
|
@ -117,8 +87,6 @@ class IssueTrackerService < Service
|
|||
def set_default_data
|
||||
return unless issues_tracker.present?
|
||||
|
||||
self.title ||= issues_tracker['title']
|
||||
|
||||
# we don't want to override if we have set something
|
||||
return if project_url || issues_url || new_issue_url
|
||||
|
||||
|
|
|
@ -64,8 +64,6 @@ class JiraService < IssueTrackerService
|
|||
def set_default_data
|
||||
return unless issues_tracker.present?
|
||||
|
||||
self.title ||= issues_tracker['title']
|
||||
|
||||
return if url
|
||||
|
||||
data_fields.url ||= issues_tracker['url']
|
||||
|
@ -103,11 +101,11 @@ class JiraService < IssueTrackerService
|
|||
[Jira service documentation](#{help_page_url('user/project/integrations/jira')})."
|
||||
end
|
||||
|
||||
def default_title
|
||||
def title
|
||||
'Jira'
|
||||
end
|
||||
|
||||
def default_description
|
||||
def description
|
||||
s_('JiraService|Jira issue tracker')
|
||||
end
|
||||
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
class RedmineService < IssueTrackerService
|
||||
validates :project_url, :issues_url, :new_issue_url, presence: true, public_url: true, if: :activated?
|
||||
|
||||
def default_title
|
||||
def title
|
||||
'Redmine'
|
||||
end
|
||||
|
||||
def default_description
|
||||
def description
|
||||
s_('IssueTracker|Redmine issue tracker')
|
||||
end
|
||||
|
||||
|
|
|
@ -12,11 +12,11 @@ class YoutrackService < IssueTrackerService
|
|||
end
|
||||
end
|
||||
|
||||
def default_title
|
||||
def title
|
||||
'YouTrack'
|
||||
end
|
||||
|
||||
def default_description
|
||||
def description
|
||||
s_('IssueTracker|YouTrack issue tracker')
|
||||
end
|
||||
|
||||
|
@ -26,7 +26,6 @@ class YoutrackService < IssueTrackerService
|
|||
|
||||
def fields
|
||||
[
|
||||
{ type: 'text', name: 'description', placeholder: description },
|
||||
{ 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 }
|
||||
]
|
||||
|
|
|
@ -7,6 +7,9 @@ class Service < ApplicationRecord
|
|||
include Importable
|
||||
include ProjectServicesLoggable
|
||||
include DataFields
|
||||
include IgnorableColumns
|
||||
|
||||
ignore_columns %i[title description], remove_with: '13.4', remove_after: '2020-09-22'
|
||||
|
||||
SERVICE_NAMES = %w[
|
||||
alerts asana assembla bamboo bugzilla buildkite campfire custom_issue_tracker discord
|
||||
|
|
9
app/services/gpg_keys/destroy_service.rb
Normal file
9
app/services/gpg_keys/destroy_service.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module GpgKeys
|
||||
class DestroyService < Keys::BaseService
|
||||
def execute(key)
|
||||
key.destroy
|
||||
end
|
||||
end
|
||||
end
|
|
@ -5,22 +5,16 @@ module Jira
|
|||
class Base
|
||||
include ProjectServicesLoggable
|
||||
|
||||
PER_PAGE = 50
|
||||
attr_reader :jira_service, :project, :query
|
||||
|
||||
attr_reader :jira_service, :project, :limit, :start_at, :query
|
||||
|
||||
def initialize(jira_service, limit: PER_PAGE, start_at: 0, query: nil)
|
||||
def initialize(jira_service, query: nil)
|
||||
@project = jira_service&.project
|
||||
@jira_service = jira_service
|
||||
|
||||
@limit = limit
|
||||
@start_at = start_at
|
||||
@query = query
|
||||
end
|
||||
|
||||
def execute
|
||||
return ServiceResponse.error(message: _('Jira service not configured.')) unless jira_service&.active?
|
||||
return ServiceResponse.success(payload: empty_payload) if limit.to_i <= 0
|
||||
|
||||
request
|
||||
end
|
||||
|
|
|
@ -9,19 +9,24 @@ module Jira
|
|||
|
||||
override :url
|
||||
def url
|
||||
'/rest/api/2/project/search?query=%{query}&maxResults=%{limit}&startAt=%{start_at}' %
|
||||
{ query: CGI.escape(query.to_s), limit: limit.to_i, start_at: start_at.to_i }
|
||||
'/rest/api/2/project'
|
||||
end
|
||||
|
||||
override :build_service_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
|
||||
|
||||
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
|
||||
|
||||
def empty_payload
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Appearance"
|
||||
- page_title _("Appearance")
|
||||
- @content_class = "limit-container-width" unless fluid_layout
|
||||
|
||||
= render 'form'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- add_to_breadcrumbs "Applications", admin_applications_path
|
||||
- add_to_breadcrumbs _("Applications"), admin_applications_path
|
||||
- breadcrumb_title @application.name
|
||||
- page_title "Edit", @application.name, "Applications"
|
||||
- page_title _("Edit"), @application.name, _("Applications")
|
||||
|
||||
%h3.page-title Edit application
|
||||
- @url = admin_application_path(@application)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Applications"
|
||||
- page_title _("Applications")
|
||||
%h3.page-title
|
||||
System OAuth applications
|
||||
%p.light
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- breadcrumb_title "Applications"
|
||||
- page_title "New Application"
|
||||
- breadcrumb_title _("Applications")
|
||||
- page_title _("New Application")
|
||||
|
||||
%h3.page-title New application
|
||||
- @url = admin_applications_path
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title @application.name, "Applications"
|
||||
- page_title @application.name, _("Applications")
|
||||
|
||||
%h3.page-title
|
||||
Application: #{@application.name}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Background Jobs"
|
||||
- page_title _("Background Jobs")
|
||||
|
||||
%h3.page-title Background Jobs
|
||||
%p.light GitLab uses #{link_to "sidekiq", "http://sidekiq.org/"} library for async job processing
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- breadcrumb_title "Messages"
|
||||
- page_title "Broadcast Messages"
|
||||
- breadcrumb_title _("Messages")
|
||||
- page_title _("Broadcast Messages")
|
||||
|
||||
= render 'form'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- breadcrumb_title "Messages"
|
||||
- page_title "Broadcast Messages"
|
||||
- breadcrumb_title _("Messages")
|
||||
- page_title _("Broadcast Messages")
|
||||
|
||||
%h3.page-title
|
||||
Broadcast Messages
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title "Dashboard"
|
||||
- breadcrumb_title _("Dashboard")
|
||||
- page_title _("Dashboard")
|
||||
|
||||
- if show_license_breakdown?
|
||||
= render_if_exists 'admin/licenses/breakdown', license: @license
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title 'New Deploy Key'
|
||||
- page_title _('New Deploy Key')
|
||||
%h3.page-title New public deploy key
|
||||
%hr
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title _("Gitaly Servers")
|
||||
- page_title _("Gitaly Servers")
|
||||
|
||||
%h3.page-title= _("Gitaly Servers")
|
||||
%hr
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title 'Request details'
|
||||
- page_title _('Request details')
|
||||
%h3.page-title
|
||||
Request details
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title "Jobs"
|
||||
- breadcrumb_title _("Jobs")
|
||||
- page_title _("Jobs")
|
||||
|
||||
.top-area.scrolling-tabs-container.inner-page-scroll-tabs
|
||||
- build_path_proc = ->(scope) { admin_jobs_path(scope: scope) }
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
- page_title @key.title, "Keys"
|
||||
- page_title @key.title, _("Keys")
|
||||
= render "profiles/keys/key_details", admin: true
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- add_to_breadcrumbs "Projects", admin_projects_path
|
||||
- add_to_breadcrumbs _("Projects"), admin_projects_path
|
||||
- breadcrumb_title @project.full_name
|
||||
- page_title @project.full_name, "Projects"
|
||||
- page_title @project.full_name, _("Projects")
|
||||
- @content_class = "admin-projects"
|
||||
|
||||
%h3.page-title
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title 'Requests Profiles'
|
||||
- page_title _('Requests Profiles')
|
||||
|
||||
%h3.page-title
|
||||
= page_title
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title _('Runners')
|
||||
- page_title _('Runners')
|
||||
|
||||
.row
|
||||
.col-sm-6
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
%span.runner-state.runner-state-specific
|
||||
Specific
|
||||
|
||||
- page_title _("Runners")
|
||||
- add_to_breadcrumbs _("Runners"), admin_runners_path
|
||||
- breadcrumb_title "##{@runner.id}"
|
||||
|
||||
|
|
|
@ -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
|
||||
- page_title @service.title, "Service Templates"
|
||||
- @content_class = 'limit-container-width' unless fluid_layout
|
||||
|
||||
= render 'form'
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Service Templates"
|
||||
- page_title _("Service Templates")
|
||||
%h3.page-title Service templates
|
||||
%p.light= s_('AdminSettings|Service template allows you to set default values for integrations')
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Spam Logs"
|
||||
- page_title _("Spam Logs")
|
||||
%h3.page-title Spam Logs
|
||||
%hr
|
||||
- if @spam_logs.present?
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Edit", @user.name, "Users"
|
||||
- page_title _("Edit"), @user.name, _("Users")
|
||||
%h3.page-title
|
||||
Edit user: #{@user.name}
|
||||
%hr
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Users"
|
||||
- page_title _("Users")
|
||||
|
||||
.top-area.scrolling-tabs-container.inner-page-scroll-tabs
|
||||
.fade-left
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- add_to_breadcrumbs "Users", admin_users_path
|
||||
- add_to_breadcrumbs _("Users"), admin_users_path
|
||||
- breadcrumb_title @user.name
|
||||
- page_title "SSH Keys", @user.name, "Users"
|
||||
- page_title _("SSH Keys"), @user.name, _("Users")
|
||||
= render 'admin/users/head'
|
||||
= render 'profiles/keys/key_table', admin: true
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "New User"
|
||||
- page_title _("New User")
|
||||
%h3.page-title
|
||||
New user
|
||||
%hr
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- add_to_breadcrumbs "Users", admin_users_path
|
||||
- add_to_breadcrumbs _("Users"), admin_users_path
|
||||
- breadcrumb_title @user.name
|
||||
- page_title "Groups and projects", @user.name, "Users"
|
||||
- page_title _("Groups and projects"), @user.name, _("Users")
|
||||
= render 'admin/users/head'
|
||||
|
||||
- if @user.groups.any?
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- add_to_breadcrumbs "Users", admin_users_path
|
||||
- add_to_breadcrumbs _("Users"), admin_users_path
|
||||
- breadcrumb_title @user.name
|
||||
- page_title @user.name, "Users"
|
||||
- page_title @user.name, _("Users")
|
||||
= render 'admin/users/head'
|
||||
|
||||
.row
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
= render_dashboard_gold_trial(current_user)
|
||||
|
||||
- page_title "Activity"
|
||||
- header_title "Activity", activity_dashboard_path
|
||||
- page_title _("Activity")
|
||||
- header_title _("Activity"), activity_dashboard_path
|
||||
|
||||
= render "projects/last_push"
|
||||
= render 'dashboard/activity_head'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @hide_top_links = true
|
||||
- page_title "Groups"
|
||||
- header_title "Groups", dashboard_groups_path
|
||||
- page_title _("Groups")
|
||||
- header_title _("Groups"), dashboard_groups_path
|
||||
|
||||
= render_dashboard_gold_trial(current_user)
|
||||
= render 'dashboard/groups_head'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @hide_top_links = true
|
||||
- page_title 'Milestones'
|
||||
- header_title 'Milestones', dashboard_milestones_path
|
||||
- page_title _('Milestones')
|
||||
- header_title _('Milestones'), dashboard_milestones_path
|
||||
|
||||
.page-title-holder.d-flex.align-items-center
|
||||
%h1.page-title= _('Milestones')
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
= render_dashboard_gold_trial(current_user)
|
||||
|
||||
- page_title "Projects"
|
||||
- header_title "Projects", dashboard_projects_path
|
||||
- page_title _("Projects")
|
||||
- header_title _("Projects"), dashboard_projects_path
|
||||
|
||||
= render "projects/last_push"
|
||||
- if show_projects?(@projects, params)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @hide_top_links = true
|
||||
- page_title "Snippets"
|
||||
- header_title "Snippets", dashboard_snippets_path
|
||||
- page_title _("Snippets")
|
||||
- header_title _("Snippets"), dashboard_snippets_path
|
||||
- button_path = new_snippet_path if can?(current_user, :create_snippet)
|
||||
|
||||
= render 'dashboard/snippets_head'
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @hide_top_links = true
|
||||
- page_title "To-Do List"
|
||||
- header_title "To-Do List", dashboard_todos_path
|
||||
- page_title _("To-Do List")
|
||||
- header_title _("To-Do List"), dashboard_todos_path
|
||||
|
||||
= render_dashboard_gold_trial(current_user)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Sign up"
|
||||
- page_title _("Sign up")
|
||||
- if experiment_enabled?(:signup_flow)
|
||||
.row
|
||||
.col-lg-7
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Sign in"
|
||||
- page_title _("Sign in")
|
||||
|
||||
#signin-container
|
||||
- if any_form_based_providers_enabled?
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @hide_top_links = true
|
||||
- page_title "Snippets"
|
||||
- header_title "Snippets", snippets_path
|
||||
- page_title _("Snippets")
|
||||
- header_title _("Snippets"), snippets_path
|
||||
|
||||
- if current_user
|
||||
= render 'dashboard/snippets_head'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
= content_for :meta_tags do
|
||||
= auto_discovery_link_tag(:atom, group_url(@group, rss_url_options), title: "#{@group.name} activity")
|
||||
|
||||
- page_title "Activity"
|
||||
- page_title _("Activity")
|
||||
|
||||
%section.activities
|
||||
= render 'activities'
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title _("General Settings")
|
||||
- page_title _("General Settings")
|
||||
- @content_class = "limit-container-width" unless fluid_layout
|
||||
- expanded = expanded_by_default?
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @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
|
||||
= auto_discovery_link_tag(:atom, safe_params.merge(rss_url_options).to_h, title: "#{@group.name} issues")
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- add_to_breadcrumbs _("Labels"), group_labels_path(@group)
|
||||
- breadcrumb_title _("Edit")
|
||||
- page_title "Edit", @label.name, _("Labels")
|
||||
- page_title _("Edit"), @label.name, _("Labels")
|
||||
|
||||
%h3.page-title
|
||||
Edit Label
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title 'Labels'
|
||||
- page_title _('Labels')
|
||||
- can_admin_label = can?(current_user, :admin_label, @group)
|
||||
- search = params[:search]
|
||||
- subscribed = params[:subscribed]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @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?
|
||||
= render 'shared/empty_states/merge_requests', project_select_button: true
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Milestones"
|
||||
- page_title _("Milestones")
|
||||
|
||||
.top-area
|
||||
= render 'shared/milestones_filter', counts: @milestone_states
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title "Projects"
|
||||
- breadcrumb_title _("Projects")
|
||||
- page_title _("Projects")
|
||||
|
||||
.card.prepend-top-default
|
||||
.card-header
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- breadcrumb_title "CI / CD Settings"
|
||||
- page_title "CI / CD"
|
||||
- breadcrumb_title _("CI / CD Settings")
|
||||
- page_title _("CI / CD")
|
||||
|
||||
- expanded = expanded_by_default?
|
||||
- general_expanded = @group.errors.empty? ? expanded : true
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title _("Details")
|
||||
- page_title _("Groups")
|
||||
- @content_class = "limit-container-width" unless fluid_layout
|
||||
|
||||
= content_for :meta_tags do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title 'Instance Configuration'
|
||||
- page_title _('Instance Configuration')
|
||||
.documentation.md
|
||||
%h1 Instance Configuration
|
||||
|
||||
|
|
|
@ -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."
|
||||
- link_classes = "flex-grow-1 mx-1 "
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- @body_class = 'ide-layout'
|
||||
- page_title 'IDE'
|
||||
- page_title _('IDE')
|
||||
|
||||
- content_for :page_specific_javascripts do
|
||||
= stylesheet_link_tag 'page_bundles/ide'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- title = _('Bitbucket Server Import')
|
||||
- page_title title
|
||||
- breadcrumb_title title
|
||||
- header_title "Projects", root_path
|
||||
- header_title _("Projects"), root_path
|
||||
|
||||
%h3.page-title
|
||||
= icon 'bitbucket-square', text: _('Import repositories from Bitbucket Server')
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- page_title 'Bitbucket Server import'
|
||||
- header_title 'Projects', root_path
|
||||
- page_title _('Bitbucket Server import')
|
||||
- header_title _('Projects'), root_path
|
||||
|
||||
%h3.page-title
|
||||
%i.fa.fa-bitbucket-square
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- page_title "Manifest file import"
|
||||
- header_title "Projects", root_path
|
||||
- page_title _("Manifest file import")
|
||||
- header_title _("Projects"), root_path
|
||||
|
||||
%h3.page-title
|
||||
= _('Manifest file import')
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- page_title "Manifest import"
|
||||
- header_title "Projects", root_path
|
||||
- page_title _("Manifest import")
|
||||
- header_title _("Projects"), root_path
|
||||
- provider = 'manifest'
|
||||
|
||||
%h3.page-title
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title _("Cohorts")
|
||||
- page_title _("Cohorts")
|
||||
|
||||
- if @cohorts
|
||||
= render 'cohorts_table'
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
%li= link_to _('New project'), new_project_path(namespace_id: @group.id)
|
||||
- if create_group_subgroup
|
||||
%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.dropdown-bold-header GitLab
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
- page_title _("Snippets")
|
||||
- header_title _("Snippets"), snippets_path
|
||||
- snippets_upload_path = snippets_upload_path(@snippet, current_user)
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- breadcrumb_title s_("Profiles|Edit Profile")
|
||||
- page_title s_("Profiles|Edit Profile")
|
||||
- @content_class = "limit-container-width" unless fluid_layout
|
||||
- gravatar_link = link_to Gitlab.config.gravatar.host, 'https://' + Gitlab.config.gravatar.host
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- 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"
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Blame", @blob.path, @ref
|
||||
- page_title _("Blame"), @blob.path, @ref
|
||||
- link_icon = icon("link")
|
||||
|
||||
#blob-content-holder.tree-holder
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- breadcrumb_title "Repository"
|
||||
- page_title "Edit", @blob.path, @ref
|
||||
- breadcrumb_title _("Repository")
|
||||
- page_title _("Edit"), @blob.path, @ref
|
||||
- unless Feature.enabled?(:monaco_blobs)
|
||||
- content_for :page_specific_javascripts do
|
||||
= page_specific_javascript_tag('lib/ace.js')
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- breadcrumb_title "Repository"
|
||||
- page_title "New File", @path.presence, @ref
|
||||
- breadcrumb_title _("Repository")
|
||||
- page_title _("New File"), @path.presence, @ref
|
||||
- unless Feature.enabled?(:monaco_blobs)
|
||||
- content_for :page_specific_javascripts do
|
||||
= page_specific_javascript_tag('lib/ace.js')
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "New Branch"
|
||||
- page_title _("New Branch")
|
||||
- default_ref = params[:ref] || @project.default_branch
|
||||
|
||||
- if @error
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
- breadcrumb_title "Compare Revisions"
|
||||
- page_title "Compare"
|
||||
- breadcrumb_title _("Compare Revisions")
|
||||
- page_title _("Compare")
|
||||
|
||||
%h3.page-title
|
||||
= _("Compare Git revisions")
|
||||
|
|
|
@ -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) } }
|
||||
- if @cycle_analytics_no_data
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title 'Edit Deploy Key'
|
||||
- page_title _('Edit Deploy Key')
|
||||
%h3.page-title= _('Edit Deploy Key')
|
||||
%hr
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
- @content_class = "limit-container-width" unless fluid_layout
|
||||
- breadcrumb_title _("Details")
|
||||
- page_title _("Details")
|
||||
|
||||
= render partial: 'flash_messages', locals: { project: @project }
|
||||
|
||||
|
|
|
@ -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)) }
|
||||
.nav-block
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Import repository"
|
||||
- page_title _("Import repository")
|
||||
%h3.page-title
|
||||
Import repository
|
||||
|
||||
|
|
|
@ -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
|
||||
Edit Issue ##{@issue.iid}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- @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')
|
||||
|
||||
= content_for :meta_tags do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Jobs"
|
||||
- page_title _("Jobs")
|
||||
|
||||
.top-area
|
||||
- build_path_proc = ->(scope) { project_jobs_path(@project, scope: scope) }
|
||||
|
|
|
@ -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)
|
||||
- breadcrumb_title 'Terminal'
|
||||
- page_title 'Terminal', "#{@build.name} (##{@build.id})", 'Jobs'
|
||||
- breadcrumb_title _('Terminal')
|
||||
- page_title _('Terminal'), "#{@build.name} (##{@build.id})", _('Jobs')
|
||||
|
||||
- content_for :page_specific_javascripts do
|
||||
= stylesheet_link_tag "xterm.css"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
- add_to_breadcrumbs "Labels", project_labels_path(@project)
|
||||
- breadcrumb_title "Edit"
|
||||
- page_title "Edit", @label.name, "Labels"
|
||||
- add_to_breadcrumbs _("Labels"), project_labels_path(@project)
|
||||
- breadcrumb_title _("Edit")
|
||||
- page_title _("Edit"), @label.name, _("Labels")
|
||||
|
||||
%h3.page-title
|
||||
Edit Label
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
- page_title "Labels"
|
||||
- page_title _("Labels")
|
||||
- can_admin_label = can?(current_user, :admin_label, @project)
|
||||
- search = params[:search]
|
||||
- subscribed = params[:subscribed]
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue