diff options
Diffstat (limited to 'app/helpers/web_ide_button_helper.rb')
-rw-r--r-- | app/helpers/web_ide_button_helper.rb | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/app/helpers/web_ide_button_helper.rb b/app/helpers/web_ide_button_helper.rb new file mode 100644 index 00000000000..0a4d47eed52 --- /dev/null +++ b/app/helpers/web_ide_button_helper.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true + +module WebIdeButtonHelper + def project_fork + current_user&.fork_of(@project) + end + + def project_to_use + fork? ? project_fork : @project + end + + def can_collaborate? + can_collaborate_with_project?(@project) + end + + def can_create_mr_from_fork? + can?(current_user, :fork_project, @project) && can?(current_user, :create_merge_request_in, @project) + end + + def show_web_ide_button? + can_collaborate? || can_create_mr_from_fork? + end + + def show_edit_button? + readable_blob? && show_web_ide_button? + end + + def show_gitpod_button? + show_web_ide_button? && Gitlab::Gitpod.feature_and_settings_enabled?(@project) + end + + def can_push_code? + current_user&.can?(:push_code, @project) + end + + def fork? + !project_fork.nil? && !can_push_code? + end + + def readable_blob? + !readable_blob({}, @path, @project, @ref).nil? + end + + def needs_to_fork? + !can_collaborate? && !current_user&.already_forked?(@project) + end + + def web_ide_url + ide_edit_path(project_to_use, @ref, @path || '') + end + + def edit_url + readable_blob? ? edit_blob_path(@project, @ref, @path || '') : '' + end + + def gitpod_url + return "" unless Gitlab::Gitpod.feature_and_settings_enabled?(@project) + + "#{Gitlab::CurrentSettings.gitpod_url}##{project_tree_url(@project, tree_join(@ref, @path || ''))}" + end +end |