Module: Gitlab::GonHelper

Includes:
WebpackHelper
Included in:
ApplicationController, Oauth::ApplicationsController
Defined in:
lib/gitlab/gon_helper.rb

Instance Method Summary collapse

Methods included from WebpackHelper

#prefetch_link_tag, #webpack_bundle_tag, #webpack_controller_bundle_tags, #webpack_entrypoint_paths, #webpack_preload_asset_tag, #webpack_public_host, #webpack_public_path

Instance Method Details

#add_gon_variablesObject


9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/gitlab/gon_helper.rb', line 9

def add_gon_variables
  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

  if Gitlab.config.sentry.enabled
    gon.sentry_dsn           = Gitlab.config.sentry.clientside_dsn
    gon.sentry_environment   = Gitlab.config.sentry.environment
  end

  gon.recaptcha_api_server_url = ::Recaptcha.configuration.api_server_url
  gon.recaptcha_sitekey      = Gitlab::CurrentSettings.recaptcha_site_key
  gon.gitlab_url             = Gitlab.config.gitlab.url
  gon.revision               = Gitlab.revision
  gon.feature_category       = Gitlab::ApplicationContext.current_context_attribute(:feature_category).presence
  gon.            = ActionController::Base.helpers.asset_path('gitlab_logo.png')
  gon.secure                 = Gitlab.config.gitlab.https
  gon.sprite_icons           = IconsHelper.sprite_icon_path
  gon.sprite_file_icons      = IconsHelper.sprite_file_icons_path
  gon.emoji_sprites_css_path = ActionController::Base.helpers.stylesheet_path('emoji_sprites')
  gon.select2_css_path       = ActionController::Base.helpers.stylesheet_path('lazy_bundles/select2.css')
  gon.test_env               = Rails.env.test?
  gon.disable_animations     = Gitlab.config.gitlab['disable_animations']
  gon.suggested_label_colors = LabelsHelper.suggested_colors
  gon.first_day_of_week      = current_user&.first_day_of_week || Gitlab::CurrentSettings.first_day_of_week
  gon.time_display_relative  = true
  gon.ee                     = Gitlab.ee?
  gon.jh                     = Gitlab.jh?
  gon.dot_com                = Gitlab.com?

  if current_user
    gon.current_user_id = current_user.id
    gon.current_username = current_user.username
    gon.current_user_fullname = current_user.name
    gon.current_user_avatar_url = current_user.avatar_url
    gon.time_display_relative = current_user.time_display_relative
  end

  # Initialize gon.features with any flags that should be
  # made globally available to the frontend
  push_frontend_feature_flag(:usage_data_api, type: :ops)
  push_frontend_feature_flag(:security_auto_fix)
  push_frontend_feature_flag(:new_header_search)
  push_frontend_feature_flag(:bootstrap_confirmation_modals)
  push_frontend_feature_flag(:sandboxed_mermaid)
  push_frontend_feature_flag(:source_editor_toolbar)
  push_frontend_feature_flag(:gl_avatar_for_all_user_avatars)
  push_frontend_feature_flag(:mr_attention_requests, current_user)
  push_frontend_feature_flag(:follow_in_user_popover, current_user)
end

#default_avatar_urlObject


93
94
95
96
97
98
99
100
101
# File 'lib/gitlab/gon_helper.rb', line 93

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

#push_force_frontend_feature_flag(name, enabled) ⇒ Object

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.


81
82
83
# File 'lib/gitlab/gon_helper.rb', line 81

def push_force_frontend_feature_flag(name, enabled)
  push_to_gon_attributes(:features, name, !!enabled)
end

#push_frontend_feature_flag(name, *args, **kwargs) ⇒ Object

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.

70
71
72
73
74
# File 'lib/gitlab/gon_helper.rb', line 70

def push_frontend_feature_flag(name, *args, **kwargs)
  enabled = Feature.enabled?(name, *args, **kwargs)

  push_to_gon_attributes(:features, name, enabled)
end

#push_to_gon_attributes(key, name, enabled) ⇒ Object


85
86
87
88
89
90
91
# File 'lib/gitlab/gon_helper.rb', line 85

def push_to_gon_attributes(key, name, enabled)
  var_name = name.to_s.camelize(:lower)
  # 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.
  gon.push({ key => { var_name => enabled } }, true)
end