diff options
-rw-r--r-- | app/assets/javascripts/lib/utils/url_utility.js | 12 | ||||
-rw-r--r-- | app/controllers/profiles/emails_controller.rb | 4 | ||||
-rw-r--r-- | app/views/admin/application_settings/_performance_bar.html.haml | 2 | ||||
-rw-r--r-- | app/views/admin/application_settings/metrics_and_profiling.html.haml | 2 | ||||
-rw-r--r-- | app/views/profiles/emails/index.html.haml | 46 | ||||
-rw-r--r-- | app/views/projects/commit/_commit_box.html.haml | 2 | ||||
-rw-r--r-- | app/views/shared/_email_with_badge.html.haml | 2 | ||||
-rw-r--r-- | changelogs/unreleased/62144-fix-option-dropdown-button-size.yml | 5 | ||||
-rw-r--r-- | changelogs/unreleased/i18n-email-of-user-profile.yml | 5 | ||||
-rw-r--r-- | changelogs/unreleased/sh-add-backtrace-to-sql-queries.yml | 5 | ||||
-rw-r--r-- | lib/gitlab/performance_bar/peek_query_tracker.rb | 7 | ||||
-rw-r--r-- | locale/gitlab.pot | 57 | ||||
-rw-r--r-- | spec/features/admin/admin_settings_spec.rb | 8 | ||||
-rw-r--r-- | spec/frontend/lib/utils/url_utility_spec.js | 44 |
14 files changed, 155 insertions, 46 deletions
diff --git a/app/assets/javascripts/lib/utils/url_utility.js b/app/assets/javascripts/lib/utils/url_utility.js index b5474fc5c71..32fd0990374 100644 --- a/app/assets/javascripts/lib/utils/url_utility.js +++ b/app/assets/javascripts/lib/utils/url_utility.js @@ -1,3 +1,5 @@ +import { join as joinPaths } from 'path'; + // Returns an array containing the value(s) of the // of the key passed as an argument export function getParameterValues(sParam) { @@ -157,4 +159,12 @@ export function isSafeURL(url) { } } -export { join as joinPaths } from 'path'; +export function getWebSocketProtocol() { + return window.location.protocol.replace('http', 'ws'); +} + +export function getWebSocketUrl(path) { + return `${getWebSocketProtocol()}//${joinPaths(window.location.host, path)}`; +} + +export { joinPaths }; diff --git a/app/controllers/profiles/emails_controller.rb b/app/controllers/profiles/emails_controller.rb index 503eda250b4..f666a1150a6 100644 --- a/app/controllers/profiles/emails_controller.rb +++ b/app/controllers/profiles/emails_controller.rb @@ -28,9 +28,9 @@ class Profiles::EmailsController < Profiles::ApplicationController def resend_confirmation_instructions if Emails::ConfirmService.new(current_user, user: current_user).execute(@email) - flash[:notice] = "Confirmation email sent to #{@email.email}" + flash[:notice] = _("Confirmation email sent to %{email}") % { email: @email.email } else - flash[:alert] = "There was a problem sending the confirmation email" + flash[:alert] = _("There was a problem sending the confirmation email") end redirect_to profile_emails_url diff --git a/app/views/admin/application_settings/_performance_bar.html.haml b/app/views/admin/application_settings/_performance_bar.html.haml index f992d531ea5..1e66b635038 100644 --- a/app/views/admin/application_settings/_performance_bar.html.haml +++ b/app/views/admin/application_settings/_performance_bar.html.haml @@ -6,7 +6,7 @@ .form-check = f.check_box :performance_bar_enabled, class: 'form-check-input' = f.label :performance_bar_enabled, class: 'form-check-label qa-enable-performance-bar-checkbox' do - Enable the Performance Bar + Enable access to the Performance Bar .form-group = f.label :performance_bar_allowed_group_path, 'Allowed group', class: 'label-bold' = f.text_field :performance_bar_allowed_group_path, class: 'form-control', placeholder: 'my-org/my-group', value: @application_setting.performance_bar_allowed_group&.full_path diff --git a/app/views/admin/application_settings/metrics_and_profiling.html.haml b/app/views/admin/application_settings/metrics_and_profiling.html.haml index d5ba6abe7af..01d61beaf53 100644 --- a/app/views/admin/application_settings/metrics_and_profiling.html.haml +++ b/app/views/admin/application_settings/metrics_and_profiling.html.haml @@ -31,7 +31,7 @@ %button.btn.btn-default.js-settings-toggle{ type: 'button' } = expanded_by_default? ? _('Collapse') : _('Expand') %p - = _('Enable the Performance Bar for a given group.') + = _('Enable access to the Performance Bar for a given group.') = link_to icon('question-circle'), help_page_path('administration/monitoring/performance/performance_bar') .settings-content = render 'performance_bar' diff --git a/app/views/profiles/emails/index.html.haml b/app/views/profiles/emails/index.html.haml index c90a0b3e329..3c20518c038 100644 --- a/app/views/profiles/emails/index.html.haml +++ b/app/views/profiles/emails/index.html.haml @@ -1,4 +1,4 @@ -- page_title "Emails" +- page_title _('Emails') - @content_class = "limit-container-width" unless fluid_layout .row.prepend-top-default @@ -6,58 +6,58 @@ %h4.prepend-top-0 = page_title %p - Control emails linked to your account + = _('Control emails linked to your account') .col-lg-8 %h4.prepend-top-0 - Add email address + = _('Add email address') = form_for 'email', url: profile_emails_path do |f| .form-group - = f.label :email, class: 'label-bold' + = f.label :email, _('Email'), class: 'label-bold' = f.text_field :email, class: 'form-control' .prepend-top-default - = f.submit 'Add email address', class: 'btn btn-success' + = f.submit _('Add email address'), class: 'btn btn-success' %hr %h4.prepend-top-0 - Linked emails (#{@emails.count + 1}) + = _('Linked emails (%{email_count})') % { email_count: @emails.count + 1 } .account-well.append-bottom-default %ul %li - Your Primary Email will be used for avatar detection. + = _('Your Primary Email will be used for avatar detection.') %li - Your Commit Email will be used for web based operations, such as edits and merges. + = _('Your Commit Email will be used for web based operations, such as edits and merges.') %li - Your Default Notification Email will be used for account notifications if a - = link_to 'group-specific email address', profile_notifications_path - is not set. + - address = profile_notifications_path + - notification_message = _('Your Default Notification Email will be used for account notifications if a %{openingTag}group-specific email address%{closingTag} is not set.') % { openingTag: "<a href='#{address}'>".html_safe, closingTag: '</a>'.html_safe} + = notification_message.html_safe %li - Your Public Email will be displayed on your public profile. + = _('Your Public Email will be displayed on your public profile.') %li - All email addresses will be used to identify your commits. + = _('All email addresses will be used to identify your commits.') %ul.content-list %li = render partial: 'shared/email_with_badge', locals: { email: @primary_email, verified: current_user.confirmed? } %span.float-right - %span.badge.badge-success Primary email + %span.badge.badge-success= s_('Profiles|Primary email') - if @primary_email === current_user.commit_email - %span.badge.badge-info Commit email + %span.badge.badge-info= s_('Profiles|Commit email') - if @primary_email === current_user.public_email - %span.badge.badge-info Public email + %span.badge.badge-info= s_('Profiles|Public email') - if @primary_email === current_user.notification_email - %span.badge.badge-info Default notification email + %span.badge.badge-info= s_('Profiles|Default notification email') - @emails.each do |email| %li = render partial: 'shared/email_with_badge', locals: { email: email.email, verified: email.confirmed? } %span.float-right - if email.email === current_user.commit_email - %span.badge.badge-info Commit email + %span.badge.badge-info= s_('Profiles|Commit email') - if email.email === current_user.public_email - %span.badge.badge-info Public email + %span.badge.badge-info= s_('Profiles|Public email') - if email.email === current_user.notification_email - %span.badge.badge-info Notification email + %span.badge.badge-info= s_('Profiles|Notification email') - unless email.confirmed? - - confirm_title = "#{email.confirmation_sent_at ? 'Resend' : 'Send'} confirmation email" + - confirm_title = "#{email.confirmation_sent_at ? _('Resend confirmation email') : _('Send confirmation email')}" = link_to confirm_title, resend_confirmation_instructions_profile_email_path(email), method: :put, class: 'btn btn-sm btn-warning prepend-left-10' - = link_to profile_email_path(email), data: { confirm: 'Are you sure?'}, method: :delete, class: 'btn btn-sm btn-danger prepend-left-10' do - %span.sr-only Remove + = link_to profile_email_path(email), data: { confirm: _('Are you sure?')}, method: :delete, class: 'btn btn-sm btn-danger prepend-left-10' do + %span.sr-only= _('Remove') = icon('trash') diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml index ef2777e6601..77ea2c04b28 100644 --- a/app/views/projects/commit/_commit_box.html.haml +++ b/app/views/projects/commit/_commit_box.html.haml @@ -28,7 +28,7 @@ = link_to project_tree_path(@project, @commit), class: "btn btn-default append-right-10 d-none d-sm-none d-md-inline" do #{ _('Browse files') } .dropdown.inline - %a.btn.btn-default.dropdown-toggle.qa-options-button{ data: { toggle: "dropdown" } } + %a.btn.btn-default.dropdown-toggle.qa-options-button.d-md-inline{ data: { toggle: "dropdown" } } %span= _('Options') = icon('caret-down') %ul.dropdown-menu.dropdown-menu-right diff --git a/app/views/shared/_email_with_badge.html.haml b/app/views/shared/_email_with_badge.html.haml index ad863b1967d..294fe74a5ca 100644 --- a/app/views/shared/_email_with_badge.html.haml +++ b/app/views/shared/_email_with_badge.html.haml @@ -1,6 +1,6 @@ - css_classes = %w(badge badge-verification-status) - css_classes << (verified ? 'verified': 'unverified') -- text = verified ? 'Verified' : 'Unverified' +- text = verified ? _('Verified') : _('Unverified') .email-badge .email-badge-email= email diff --git a/changelogs/unreleased/62144-fix-option-dropdown-button-size.yml b/changelogs/unreleased/62144-fix-option-dropdown-button-size.yml new file mode 100644 index 00000000000..86d8f4536f9 --- /dev/null +++ b/changelogs/unreleased/62144-fix-option-dropdown-button-size.yml @@ -0,0 +1,5 @@ +--- +title: Fix inconsistent option dropdown button height to match adjacent button +merge_request: 29096 +author: +type: fixed diff --git a/changelogs/unreleased/i18n-email-of-user-profile.yml b/changelogs/unreleased/i18n-email-of-user-profile.yml new file mode 100644 index 00000000000..6cb718843d5 --- /dev/null +++ b/changelogs/unreleased/i18n-email-of-user-profile.yml @@ -0,0 +1,5 @@ +--- +title: Externalize strings of email page in user profile +merge_request: 28587 +author: antony liu +type: other diff --git a/changelogs/unreleased/sh-add-backtrace-to-sql-queries.yml b/changelogs/unreleased/sh-add-backtrace-to-sql-queries.yml new file mode 100644 index 00000000000..d4ca027d1b9 --- /dev/null +++ b/changelogs/unreleased/sh-add-backtrace-to-sql-queries.yml @@ -0,0 +1,5 @@ +--- +title: Add backtraces to Peek performance bar for SQL calls +merge_request: +author: +type: added diff --git a/lib/gitlab/performance_bar/peek_query_tracker.rb b/lib/gitlab/performance_bar/peek_query_tracker.rb index 16c16aa0265..3a27e26eaba 100644 --- a/lib/gitlab/performance_bar/peek_query_tracker.rb +++ b/lib/gitlab/performance_bar/peek_query_tracker.rb @@ -27,15 +27,16 @@ module Gitlab subscribe('sql.active_record') do |_, start, finish, _, data| if Gitlab::SafeRequestStore.store[:peek_enabled] unless data[:cached] - track_query(data[:sql].strip, data[:binds], start, finish) + backtrace = Gitlab::Profiler.clean_backtrace(caller) + track_query(data[:sql].strip, data[:binds], backtrace, start, finish) end end end end - def track_query(raw_query, bindings, start, finish) + def track_query(raw_query, bindings, backtrace, start, finish) duration = (finish - start) * 1000.0 - query_info = { duration: duration.round(3), sql: raw_query } + query_info = { duration: duration.round(3), sql: raw_query, backtrace: backtrace } PEEK_DB_CLIENT.query_details << query_info end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 2845daf51e3..4a4626e5ab6 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -565,6 +565,9 @@ msgstr "" msgid "Add comment now" msgstr "" +msgid "Add email address" +msgstr "" + msgid "Add header and footer to emails. Please note that color settings will only be applied within the application interface" msgstr "" @@ -775,6 +778,9 @@ msgstr "" msgid "All changes are committed" msgstr "" +msgid "All email addresses will be used to identify your commits." +msgstr "" + msgid "All features are enabled for blank projects, from templates, or when importing, but you can disable them afterward in the project settings." msgstr "" @@ -2798,6 +2804,9 @@ msgstr "" msgid "Confirm" msgstr "" +msgid "Confirmation email sent to %{email}" +msgstr "" + msgid "Confirmation required" msgstr "" @@ -2906,6 +2915,9 @@ msgstr "" msgid "ContributorsPage|Please wait a moment, this page will automatically refresh when ready." msgstr "" +msgid "Control emails linked to your account" +msgstr "" + msgid "Control the display of third party offers." msgstr "" @@ -3757,6 +3769,9 @@ msgstr "" msgid "Enable Sentry for error reporting and logging." msgstr "" +msgid "Enable access to the Performance Bar for a given group." +msgstr "" + msgid "Enable and configure InfluxDB metrics." msgstr "" @@ -3790,9 +3805,6 @@ msgstr "" msgid "Enable shared Runners" msgstr "" -msgid "Enable the Performance Bar for a given group." -msgstr "" - msgid "Enable two-factor authentication" msgstr "" @@ -5817,6 +5829,9 @@ msgid_plural "Limited to showing %d events at most" msgstr[0] "" msgstr[1] "" +msgid "Linked emails (%{email_count})" +msgstr "" + msgid "LinkedIn" msgstr "" @@ -7474,6 +7489,9 @@ msgstr "" msgid "Profiles|Click on icon to activate signin with one of the following services" msgstr "" +msgid "Profiles|Commit email" +msgstr "" + msgid "Profiles|Connect" msgstr "" @@ -7486,6 +7504,9 @@ msgstr "" msgid "Profiles|Current status" msgstr "" +msgid "Profiles|Default notification email" +msgstr "" + msgid "Profiles|Delete Account" msgstr "" @@ -7552,6 +7573,9 @@ msgstr "" msgid "Profiles|No file chosen" msgstr "" +msgid "Profiles|Notification email" +msgstr "" + msgid "Profiles|Organization" msgstr "" @@ -7561,6 +7585,9 @@ msgstr "" msgid "Profiles|Position and size your new avatar" msgstr "" +msgid "Profiles|Primary email" +msgstr "" + msgid "Profiles|Private contributions" msgstr "" @@ -7570,6 +7597,9 @@ msgstr "" msgid "Profiles|Public Avatar" msgstr "" +msgid "Profiles|Public email" +msgstr "" + msgid "Profiles|Remove avatar" msgstr "" @@ -8466,6 +8496,9 @@ msgstr "" msgid "Require users to prove ownership of custom domains" msgstr "" +msgid "Resend confirmation email" +msgstr "" + msgid "Resend invite" msgstr "" @@ -8870,6 +8903,9 @@ msgstr "" msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By <a href=\"#\">@johnsmith</a>\"). It will also associate and/or assign these issues and comments with the selected user." msgstr "" +msgid "Send confirmation email" +msgstr "" + msgid "Send email" msgstr "" @@ -10149,6 +10185,9 @@ msgstr "" msgid "There was a problem communicating with your device." msgstr "" +msgid "There was a problem sending the confirmation email" +msgstr "" + msgid "There was an error %{message} todo." msgstr "" @@ -11871,9 +11910,15 @@ msgstr "" msgid "YouTube" msgstr "" +msgid "Your Commit Email will be used for web based operations, such as edits and merges." +msgstr "" + msgid "Your Conversational Development Index gives an overview of how you are using GitLab from a feature perspective. View how you compare with other organizations, discover features you are not using, and learn best practices through blog posts and white papers." msgstr "" +msgid "Your Default Notification Email will be used for account notifications if a %{openingTag}group-specific email address%{closingTag} is not set." +msgstr "" + msgid "Your GPG keys (%{count})" msgstr "" @@ -11883,12 +11928,18 @@ msgstr "" msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" msgstr "" +msgid "Your Primary Email will be used for avatar detection." +msgstr "" + msgid "Your Projects (default)" msgstr "" msgid "Your Projects' Activity" msgstr "" +msgid "Your Public Email will be displayed on your public profile." +msgstr "" + msgid "Your SSH keys (%{count})" msgstr "" diff --git a/spec/features/admin/admin_settings_spec.rb b/spec/features/admin/admin_settings_spec.rb index c4dbe23f6b4..93ccb03d822 100644 --- a/spec/features/admin/admin_settings_spec.rb +++ b/spec/features/admin/admin_settings_spec.rb @@ -302,22 +302,22 @@ describe 'Admin updates settings' do group = create(:group) page.within('.as-performance-bar') do - check 'Enable the Performance Bar' + check 'Enable access to the Performance Bar' fill_in 'Allowed group', with: group.path click_on 'Save changes' end expect(page).to have_content "Application settings saved successfully" - expect(find_field('Enable the Performance Bar')).to be_checked + expect(find_field('Enable access to the Performance Bar')).to be_checked expect(find_field('Allowed group').value).to eq group.path page.within('.as-performance-bar') do - uncheck 'Enable the Performance Bar' + uncheck 'Enable access to the Performance Bar' click_on 'Save changes' end expect(page).to have_content 'Application settings saved successfully' - expect(find_field('Enable the Performance Bar')).not_to be_checked + expect(find_field('Enable access to the Performance Bar')).not_to be_checked expect(find_field('Allowed group').value).to be_nil end diff --git a/spec/frontend/lib/utils/url_utility_spec.js b/spec/frontend/lib/utils/url_utility_spec.js index eca240c9c18..c771984a137 100644 --- a/spec/frontend/lib/utils/url_utility_spec.js +++ b/spec/frontend/lib/utils/url_utility_spec.js @@ -1,5 +1,12 @@ import * as urlUtils from '~/lib/utils/url_utility'; +const setWindowLocation = value => { + Object.defineProperty(window, 'location', { + writable: true, + value, + }); +}; + describe('URL utility', () => { describe('webIDEUrl', () => { afterEach(() => { @@ -110,12 +117,9 @@ describe('URL utility', () => { describe('getBaseURL', () => { beforeEach(() => { - global.window = Object.create(window); - Object.defineProperty(window, 'location', { - value: { - host: 'gitlab.com', - protocol: 'https:', - }, + setWindowLocation({ + protocol: 'https:', + host: 'gitlab.com', }); }); @@ -191,4 +195,32 @@ describe('URL utility', () => { }); }); }); + + describe('getWebSocketProtocol', () => { + it.each` + protocol | expectation + ${'http:'} | ${'ws:'} + ${'https:'} | ${'wss:'} + `('returns "$expectation" with "$protocol" protocol', ({ protocol, expectation }) => { + setWindowLocation({ + protocol, + host: 'example.com', + }); + + expect(urlUtils.getWebSocketProtocol()).toEqual(expectation); + }); + }); + + describe('getWebSocketUrl', () => { + it('joins location host to path', () => { + setWindowLocation({ + protocol: 'http:', + host: 'example.com', + }); + + const path = '/lorem/ipsum?a=bc'; + + expect(urlUtils.getWebSocketUrl(path)).toEqual('ws://example.com/lorem/ipsum?a=bc'); + }); + }); }); |