diff options
Diffstat (limited to 'app/presenters/blob_presenter.rb')
-rw-r--r-- | app/presenters/blob_presenter.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/app/presenters/blob_presenter.rb b/app/presenters/blob_presenter.rb index c198859aa4c..5835a77d0b9 100644 --- a/app/presenters/blob_presenter.rb +++ b/app/presenters/blob_presenter.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true +require 'ipynbdiff' class BlobPresenter < Gitlab::View::Presenter::Delegated include ApplicationHelper @@ -20,6 +21,17 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated ) end + def highlight_transformed(plain: nil) + load_all_blob_data + + Gitlab::Highlight.highlight( + blob.path, + transformed_blob_data, + language: transformed_blob_language, + plain: plain + ) + end + def plain_data return if blob.binary? @@ -50,6 +62,10 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated url_helpers.project_create_blob_path(project, ref_qualified_path) end + def pipeline_editor_path + project_ci_pipeline_editor_path(project, branch_name: blob.commit_id) if can_collaborate_with_project?(project) && blob.path == project.ci_config_path_or_default + end + def fork_and_edit_path fork_path_for_current_user(project, edit_blob_path) end @@ -107,4 +123,21 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated def language blob.language_from_gitattributes end + + def transformed_blob_language + @transformed_blob_language ||= blob.path.ends_with?('.ipynb') ? 'md' : language + end + + def transformed_blob_data + @transformed_blob ||= if blob.path.ends_with?('.ipynb') && blob.transformed_for_diff + IpynbDiff.transform(blob.data, + raise_errors: true, + options: { include_metadata: false, cell_decorator: :percent }) + end + + @transformed_blob ||= blob.data + rescue IpynbDiff::InvalidNotebookError => e + Gitlab::ErrorTracking.log_exception(e) + blob.data + end end |