Class: BlobPresenter

Inherits:
Gitlab::View::Presenter::Delegated show all
Includes:
ApplicationHelper, BlobHelper, ChecksCollaboration, DiffHelper, TreeHelper
Defined in:
app/presenters/blob_presenter.rb

Instance Method Summary collapse

Methods included from ChecksCollaboration

#can_collaborate_with_project?, #user_access

Methods included from TreeHelper

#breadcrumb_data_attributes, #can_edit_tree?, #commit_in_fork_help, #commit_in_single_accessible_branch, #directory_download_links, #edit_in_new_fork_notice, #edit_in_new_fork_notice_action, #edit_in_new_fork_notice_now, #fork_modal_options, #on_top_of_branch?, #patch_branch_name, #path_breadcrumbs, #relative_url_root, #selected_branch, #tree_edit_branch, #tree_icon, #tree_join, #vue_file_list_data, #web_ide_button_data

Methods included from WebIdeButtonHelper

#can_collaborate?, #can_create_mr_from_fork?, #edit_url, #fork?, #gitpod_url, #needs_to_fork?, #project_fork, #project_to_use, #readable_blob?, #show_edit_button?, #show_gitpod_button?, #show_pipeline_editor_button?, #show_web_ide_button?, #web_ide_url

Methods included from BlobHelper

#blob_editor_paths, #blob_icon, #blob_raw_path, #blob_raw_url, #blob_render_error_options, #blob_render_error_reason, #contribution_options, #copy_blob_source_button, #copy_file_path_button, #dockerfile_names, #download_blob_button, #edit_blob_button, #edit_blob_fork_params, #edit_button_tag, #edit_disabled_button_tag, #edit_fork_button_tag, #edit_link_tag, #editing_preview_title, #encode_ide_path, #fork_path_for_current_user, #gitignore_names, #gitlab_ci_ymls, #human_access, #ide_merge_request_path, #leave_edit_message, #licenses_for_select, #open_raw_blob_button, #parent_dir_raw_path, #readable_blob, #ref_project, #sanitize_svg_data, #show_suggest_pipeline_creation_celebration?, #suggest_pipeline_commit_cookie_name, #vue_blob_app_data

Methods included from DiffHelper

#apply_diff_view_cookie!, #collapsed_diff_url, #conflicts, #diff_file_blob_raw_path, #diff_file_blob_raw_url, #diff_file_html_data, #diff_file_old_blob_raw_path, #diff_file_old_blob_raw_url, #diff_file_stats_data, #diff_line_content, #diff_link_number, #diff_match_line, #diff_nomappinginraw_line, #diff_options, #diff_view, #diffs_expanded?, #editable_diff?, #inline_diff_btn, #mark_inline_diffs, #parallel_diff_btn, #parallel_diff_discussions, #params_with_whitespace, #render_fork_suggestion, #render_overflow_warning?, #show_only_context_commits?, #submodule_diff_compare_link, #submodule_link

Methods included from ApplicationHelper

#active_when, #add_page_specific_style, #add_page_startup_api_call, #admin_section?, #asset_to_string, #autocomplete_data_sources, #body_data, #body_data_page, #client_class_list, #client_js_flags, #collapsed_sidebar?, #collapsed_super_sidebar?, community_forum, #community_forum, #conditional_link_to, #controller_full_path, #current_action?, #current_controller?, #discord_url, #dispensable_render, #dispensable_render_if_exists, #edited_time_ago_with_tooltip, #external_storage_url_or_path, #extra_config, #gitlab_config, #gitlab_ui_form_for, #gitlab_ui_form_with, #hexdigest, #hidden_resource_icon, #instance_review_permitted?, #last_commit, #linkedin_url, #locale_path, #outdated_browser?, #page_class, #page_filter_path, #page_startup_api_calls, #partial_exists?, #path_to_key, #project_data, #promo_host, promo_host, #promo_url, #read_only_message, #registry_config, #render_if_exists, #show_callout?, #show_last_push_widget?, #sign_in_with_redirect?, #simple_sanitize, #static_objects_external_storage_enabled?, #stylesheet_link_tag_defer, #support_url, #system_message_class, #template_exists?, #time_ago_with_tooltip, #truncate_first_line, #twitter_url

Methods inherited from Gitlab::View::Presenter::Delegated

#initialize

Methods included from Gitlab::Utils::DelegatorOverride

#delegator_override, #delegator_override_with, #delegator_target, validator, validators, verify!

Methods included from Gitlab::View::Presenter::Base

#__subject__, #can?, #declarative_policy_delegate, #is_a?, #path_with_line_numbers, #present, #url_builder

Methods included from Gitlab::Allowable

#can?

Methods included from Gitlab::Routing

includes_helpers, redirect_legacy_paths, url_helpers

Constructor Details

This class inherits a constructor from Gitlab::View::Presenter::Delegated

Instance Method Details

#archived?Boolean

Returns:

  • (Boolean)


143
144
145
# File 'app/presenters/blob_presenter.rb', line 143

def archived?
  project.archived
end

#blame_pathObject



92
93
94
# File 'app/presenters/blob_presenter.rb', line 92

def blame_path
  url_helpers.project_blame_path(project, ref_qualified_path)
end

#blob_data(to) ⇒ Object



46
47
48
# File 'app/presenters/blob_presenter.rb', line 46

def blob_data(to)
  @_blob_data ||= limited_blob_data(to: to)
end

#blob_languageObject



50
51
52
# File 'app/presenters/blob_presenter.rb', line 50

def blob_language
  @_blob_language ||= gitattr_language || detect_language
end

#can_current_user_push_to_branch?Boolean

Returns:

  • (Boolean)


137
138
139
140
141
# File 'app/presenters/blob_presenter.rb', line 137

def can_current_user_push_to_branch?
  return false unless current_user && project.repository.branch_exists?(commit_id)

  user_access(project).can_push_to_branch?(commit_id)
end

#can_modify_blob?Boolean

Returns:

  • (Boolean)


133
134
135
# File 'app/presenters/blob_presenter.rb', line 133

def can_modify_blob?
  super(blob, project, commit_id)
end

#code_navigation_pathObject



157
158
159
# File 'app/presenters/blob_presenter.rb', line 157

def code_navigation_path
  Gitlab::CodeNavigationPath.new(project, blob.commit_id).full_json_path_for(blob.path)
end

#code_ownersObject

Will be overridden in EE



117
118
119
# File 'app/presenters/blob_presenter.rb', line 117

def code_owners
  []
end

#edit_blob_pathObject



66
67
68
# File 'app/presenters/blob_presenter.rb', line 66

def edit_blob_path
  url_helpers.project_edit_blob_path(*path_params)
end

#environment_external_url_for_route_mapObject



110
111
112
113
114
# File 'app/presenters/blob_presenter.rb', line 110

def environment_external_url_for_route_map
  return unless environment

  environment.external_url_for(blob.path, blob.commit_id)
end

#environment_formatted_external_urlObject



104
105
106
107
108
# File 'app/presenters/blob_presenter.rb', line 104

def environment_formatted_external_url
  return unless environment

  environment.formatted_external_url
end

#external_storage_urlObject



151
152
153
154
155
# File 'app/presenters/blob_presenter.rb', line 151

def external_storage_url
  return unless static_objects_external_storage_enabled?

  external_storage_url_or_path(url_helpers.project_raw_url(project, ref_qualified_path), project)
end

#find_file_pathObject



88
89
90
# File 'app/presenters/blob_presenter.rb', line 88

def find_file_path
  url_helpers.project_find_file_path(project, commit_id, ref_type: ref_type)
end

#fork_and_edit_pathObject



121
122
123
# File 'app/presenters/blob_presenter.rb', line 121

def fork_and_edit_path
  fork_path_for_current_user(project, edit_blob_path)
end

#fork_and_view_pathObject



129
130
131
# File 'app/presenters/blob_presenter.rb', line 129

def fork_and_view_path
  fork_path_for_current_user(project, web_path)
end

#gitpod_blob_urlObject



82
83
84
85
86
# File 'app/presenters/blob_presenter.rb', line 82

def gitpod_blob_url
  return unless Gitlab::CurrentSettings.gitpod_enabled && !current_user.nil? && current_user.gitpod_enabled

  "#{Gitlab::CurrentSettings.gitpod_url}##{url_helpers.project_tree_url(project, tree_join(blob.commit_id, blob.path || ''))}"
end

#highlight(to: nil, plain: nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'app/presenters/blob_presenter.rb', line 25

def highlight(to: nil, plain: nil)
  load_all_blob_data

  Gitlab::Highlight.highlight(
    blob.path,
    blob_data(to),
    language: blob_language,
    plain: plain
  )
end

#highlight_and_trim(ellipsis_svg:, trim_length:, plain: nil) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/presenters/blob_presenter.rb', line 12

def highlight_and_trim(ellipsis_svg:, trim_length:, plain: nil)
  load_all_blob_data

  trimmed_lines, trimmed_idx = trimmed_blob_data(trim_length)
  Gitlab::Highlight.highlight(
    blob.path,
    trimmed_lines,
    language: blob_language,
    plain: plain,
    context: { ellipsis_indexes: trimmed_idx, ellipsis_svg: ellipsis_svg }
  )
end

#history_pathObject



96
97
98
# File 'app/presenters/blob_presenter.rb', line 96

def history_path
  url_helpers.project_commits_path(project, ref_qualified_path)
end

#ide_edit_pathObject



147
148
149
# File 'app/presenters/blob_presenter.rb', line 147

def ide_edit_path
  super(project, commit_id, blob.path)
end

#ide_fork_and_edit_pathObject



125
126
127
# File 'app/presenters/blob_presenter.rb', line 125

def ide_fork_and_edit_path
  fork_path_for_current_user(project, ide_edit_path)
end


100
101
102
# File 'app/presenters/blob_presenter.rb', line 100

def permalink_path
  url_helpers.project_blob_path(project, File.join(project.repository.commit(blob.commit_id).sha, blob.path))
end

#pipeline_editor_pathObject



78
79
80
# File 'app/presenters/blob_presenter.rb', line 78

def pipeline_editor_path
  project_ci_pipeline_editor_path(project, branch_name: commit_id) if can_collaborate_with_project?(project) && blob.path == project.ci_config_path_or_default
end

#plain_dataObject



36
37
38
39
40
# File 'app/presenters/blob_presenter.rb', line 36

def plain_data
  return if blob.binary?

  highlight(plain: false)
end

#project_blob_path_rootObject



161
162
163
# File 'app/presenters/blob_presenter.rb', line 161

def project_blob_path_root
  project_blob_path(project, commit_id)
end

#raw_pathObject



70
71
72
# File 'app/presenters/blob_presenter.rb', line 70

def raw_path
  url_helpers.project_raw_path(*path_params)
end

#raw_plain_dataObject



54
55
56
# File 'app/presenters/blob_presenter.rb', line 54

def raw_plain_data
  blob.data unless blob.binary?
end

#replace_pathObject



74
75
76
# File 'app/presenters/blob_presenter.rb', line 74

def replace_path
  url_helpers.project_update_blob_path(*path_params)
end

#trimmed_blob_data(trim_length) ⇒ Object



42
43
44
# File 'app/presenters/blob_presenter.rb', line 42

def trimmed_blob_data(trim_length)
  @_trimmed_blob_data ||= limited_trimmed_blob_data(trim_length)
end

#web_pathObject



62
63
64
# File 'app/presenters/blob_presenter.rb', line 62

def web_path
  url_helpers.project_blob_path(*path_params)
end

#web_urlObject



58
59
60
# File 'app/presenters/blob_presenter.rb', line 58

def web_url
  url_helpers.project_blob_url(*path_params)
end