2018-10-22 03:00:50 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-05-26 16:37:29 -04:00
|
|
|
# rubocop:disable Metrics/AbcSize
|
|
|
|
|
2016-04-13 01:39:18 -04:00
|
|
|
module Gitlab
|
|
|
|
module GonHelper
|
2017-06-28 22:57:35 -04:00
|
|
|
include WebpackHelper
|
|
|
|
|
2016-04-13 01:39:18 -04:00
|
|
|
def add_gon_variables
|
2021-03-01 22:10:55 -05:00
|
|
|
gon.api_version = 'v4'
|
|
|
|
gon.default_avatar_url = default_avatar_url
|
|
|
|
gon.max_file_size = Gitlab::CurrentSettings.max_attachment_size
|
|
|
|
gon.asset_host = ActionController::Base.asset_host
|
|
|
|
gon.webpack_public_path = webpack_public_path
|
|
|
|
gon.relative_url_root = Gitlab.config.gitlab.relative_url_root
|
|
|
|
gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class
|
|
|
|
gon.markdown_surround_selection = current_user&.markdown_surround_selection
|
2019-04-07 15:21:52 -04:00
|
|
|
|
2019-04-30 16:06:08 -04:00
|
|
|
if Gitlab.config.sentry.enabled
|
|
|
|
gon.sentry_dsn = Gitlab.config.sentry.clientside_dsn
|
2019-04-07 15:21:52 -04:00
|
|
|
gon.sentry_environment = Gitlab.config.sentry.environment
|
|
|
|
end
|
|
|
|
|
2021-08-24 14:10:53 -04:00
|
|
|
gon.recaptcha_api_server_url = ::Recaptcha.configuration.api_server_url
|
|
|
|
gon.recaptcha_sitekey = Gitlab::CurrentSettings.recaptcha_site_key
|
2016-10-09 18:40:58 -04:00
|
|
|
gon.gitlab_url = Gitlab.config.gitlab.url
|
2018-05-24 03:57:54 -04:00
|
|
|
gon.revision = Gitlab.revision
|
2021-06-28 17:10:13 -04:00
|
|
|
gon.feature_category = Gitlab::ApplicationContext.current_context_attribute(:feature_category).presence
|
2017-05-26 10:26:06 -04:00
|
|
|
gon.gitlab_logo = ActionController::Base.helpers.asset_path('gitlab_logo.png')
|
2022-02-01 16:12:02 -05:00
|
|
|
gon.secure = Gitlab.config.gitlab.https
|
2017-11-09 04:38:00 -05:00
|
|
|
gon.sprite_icons = IconsHelper.sprite_icon_path
|
2018-01-03 05:08:14 -05:00
|
|
|
gon.sprite_file_icons = IconsHelper.sprite_file_icons_path
|
2018-05-02 14:23:17 -04:00
|
|
|
gon.emoji_sprites_css_path = ActionController::Base.helpers.stylesheet_path('emoji_sprites')
|
2020-11-16 10:09:23 -05:00
|
|
|
gon.select2_css_path = ActionController::Base.helpers.stylesheet_path('lazy_bundles/select2.css')
|
2018-03-01 13:13:50 -05:00
|
|
|
gon.test_env = Rails.env.test?
|
2020-01-06 07:07:56 -05:00
|
|
|
gon.disable_animations = Gitlab.config.gitlab['disable_animations']
|
2018-03-05 07:33:25 -05:00
|
|
|
gon.suggested_label_colors = LabelsHelper.suggested_colors
|
2019-01-10 16:06:42 -05:00
|
|
|
gon.first_day_of_week = current_user&.first_day_of_week || Gitlab::CurrentSettings.first_day_of_week
|
2021-07-08 05:09:33 -04:00
|
|
|
gon.time_display_relative = true
|
2019-03-04 03:20:37 -05:00
|
|
|
gon.ee = Gitlab.ee?
|
2021-08-30 05:09:12 -04:00
|
|
|
gon.jh = Gitlab.jh?
|
2021-02-10 10:11:19 -05:00
|
|
|
gon.dot_com = Gitlab.com?
|
2016-04-13 01:39:18 -04:00
|
|
|
|
|
|
|
if current_user
|
|
|
|
gon.current_user_id = current_user.id
|
2016-11-11 12:56:47 -05:00
|
|
|
gon.current_username = current_user.username
|
2017-02-22 02:26:32 -05:00
|
|
|
gon.current_user_fullname = current_user.name
|
2017-05-18 04:40:35 -04:00
|
|
|
gon.current_user_avatar_url = current_user.avatar_url
|
2021-07-08 05:09:33 -04:00
|
|
|
gon.time_display_relative = current_user.time_display_relative
|
2016-04-13 01:39:18 -04:00
|
|
|
end
|
2019-09-27 14:06:20 -04:00
|
|
|
|
|
|
|
# Initialize gon.features with any flags that should be
|
|
|
|
# made globally available to the frontend
|
2021-03-26 08:09:15 -04:00
|
|
|
push_frontend_feature_flag(:usage_data_api, type: :ops, default_enabled: :yaml)
|
2020-10-15 14:08:43 -04:00
|
|
|
push_frontend_feature_flag(:security_auto_fix, default_enabled: false)
|
2021-09-06 21:02:14 -04:00
|
|
|
push_frontend_feature_flag(:new_header_search, default_enabled: :yaml)
|
2021-11-11 07:10:41 -05:00
|
|
|
push_frontend_feature_flag(:bootstrap_confirmation_modals, default_enabled: :yaml)
|
2022-01-11 10:15:55 -05:00
|
|
|
push_frontend_feature_flag(:sandboxed_mermaid, default_enabled: :yaml)
|
2022-03-08 07:20:17 -05:00
|
|
|
push_frontend_feature_flag(:source_editor_toolbar, default_enabled: :yaml)
|
2022-03-10 13:09:14 -05:00
|
|
|
push_frontend_feature_flag(:gl_avatar_for_all_user_avatars, default_enabled: :yaml)
|
2022-03-14 11:09:32 -04:00
|
|
|
push_frontend_feature_flag(:mr_attention_requests, default_enabled: :yaml)
|
2016-04-13 01:39:18 -04:00
|
|
|
end
|
2018-10-08 10:24:40 -04:00
|
|
|
|
|
|
|
# Exposes the state of a feature flag to the frontend code.
|
|
|
|
#
|
|
|
|
# name - The name of the feature flag, e.g. `my_feature`.
|
|
|
|
# args - Any additional arguments to pass to `Feature.enabled?`. This allows
|
|
|
|
# you to check if a flag is enabled for a particular user.
|
2020-10-06 11:08:33 -04:00
|
|
|
def push_frontend_feature_flag(name, *args, **kwargs)
|
|
|
|
enabled = Feature.enabled?(name, *args, **kwargs)
|
2018-10-08 10:24:40 -04:00
|
|
|
|
2020-12-15 22:09:46 -05:00
|
|
|
push_to_gon_attributes(:features, name, enabled)
|
2020-11-03 22:09:14 -05:00
|
|
|
end
|
|
|
|
|
2022-03-23 11:08:38 -04:00
|
|
|
# Exposes the state of a feature flag to the frontend code.
|
|
|
|
# Can be used for more complex feature flag checks.
|
|
|
|
#
|
|
|
|
# name - The name of the feature flag, e.g. `my_feature`.
|
|
|
|
# enabled - Boolean to be pushed directly to the frontend. Should be fetched by checking a feature flag.
|
|
|
|
def push_force_frontend_feature_flag(name, enabled)
|
|
|
|
push_to_gon_attributes(:features, name, !!enabled)
|
|
|
|
end
|
|
|
|
|
2020-12-15 22:09:46 -05:00
|
|
|
def push_to_gon_attributes(key, name, enabled)
|
2020-11-03 22:09:14 -05:00
|
|
|
var_name = name.to_s.camelize(:lower)
|
2018-10-08 10:24:40 -04:00
|
|
|
# Here the `true` argument signals gon that the value should be merged
|
|
|
|
# into any existing ones, instead of overwriting them. This allows you to
|
|
|
|
# use this method to push multiple feature flags.
|
2020-12-15 22:09:46 -05:00
|
|
|
gon.push({ key => { var_name => enabled } }, true)
|
2018-10-08 10:24:40 -04:00
|
|
|
end
|
2019-01-13 10:11:26 -05:00
|
|
|
|
|
|
|
def default_avatar_url
|
|
|
|
# We can't use ActionController::Base.helpers.image_url because it
|
|
|
|
# doesn't return an actual URL because request is nil for some reason.
|
|
|
|
#
|
|
|
|
# We also can't use Gitlab::Utils.append_path because the image path
|
|
|
|
# may be an absolute URL.
|
|
|
|
URI.join(Gitlab.config.gitlab.url,
|
|
|
|
ActionController::Base.helpers.image_path('no_avatar.png')).to_s
|
|
|
|
end
|
2016-04-13 01:39:18 -04:00
|
|
|
end
|
|
|
|
end
|
2020-11-23 22:09:18 -05:00
|
|
|
|
2021-05-11 17:10:21 -04:00
|
|
|
Gitlab::GonHelper.prepend_mod_with('Gitlab::GonHelper')
|