summaryrefslogtreecommitdiff
path: root/app/components/diffs/overflow_warning_component.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/components/diffs/overflow_warning_component.rb')
-rw-r--r--app/components/diffs/overflow_warning_component.rb73
1 files changed, 73 insertions, 0 deletions
diff --git a/app/components/diffs/overflow_warning_component.rb b/app/components/diffs/overflow_warning_component.rb
new file mode 100644
index 00000000000..0d0e225beb4
--- /dev/null
+++ b/app/components/diffs/overflow_warning_component.rb
@@ -0,0 +1,73 @@
+# frozen_string_literal: true
+
+module Diffs
+ class OverflowWarningComponent < BaseComponent
+ # Skipping coverage because of https://gitlab.com/gitlab-org/gitlab/-/issues/357381
+ #
+ # This is fully tested by the output in the view part of this component,
+ # but undercoverage doesn't understand the relationship between the two parts.
+ #
+ # :nocov:
+ def initialize(diffs:, diff_files:, project:, commit: nil, merge_request: nil)
+ @diffs = diffs
+ @diff_files = diff_files
+ @project = project
+ @commit = commit
+ @merge_request = merge_request
+ end
+
+ def message
+ html_escape(message_text) % {
+ display_size: @diff_files.size,
+ real_size: @diffs.real_size,
+ strong_open: '<strong>'.html_safe,
+ strong_close: '</strong>'.html_safe
+ }
+ end
+
+ def diff_link
+ text = _("Plain diff")
+
+ if commit?
+ link_to text, project_commit_path(@project, @commit, format: :diff), class: button_classes
+ elsif merge_request?
+ link_to text, merge_request_path(@merge_request, format: :diff), class: button_classes
+ end
+ end
+
+ def patch_link
+ text = _("Email patch")
+
+ if commit?
+ link_to text, project_commit_path(@project, @commit, format: :patch), class: button_classes
+ elsif merge_request?
+ link_to text, merge_request_path(@merge_request, format: :patch), class: button_classes
+ end
+ end
+
+ private
+
+ def commit?
+ current_controller?(:commit) &&
+ @commit.present?
+ end
+
+ def merge_request?
+ current_controller?("projects/merge_requests/diffs") &&
+ @merge_request.present? &&
+ @merge_request.persisted?
+ end
+
+ def message_text
+ _(
+ "To preserve performance only %{strong_open}%{display_size} " \
+ "of %{real_size}%{strong_close} files are displayed."
+ )
+ end
+
+ def button_classes
+ "btn gl-alert-action btn-default gl-button btn-default-secondary"
+ end
+ # :nocov:
+ end
+end