1# frozen_string_literal: true
2
3module Routing
4  module SnippetsHelper
5    def gitlab_snippet_path(snippet, *args)
6      if snippet.is_a?(ProjectSnippet)
7        project_snippet_path(snippet.project, snippet, *args)
8      else
9        new_args = snippet_query_params(snippet, *args)
10        snippet_path(snippet, *new_args)
11      end
12    end
13
14    def gitlab_snippet_url(snippet, *args)
15      if snippet.is_a?(ProjectSnippet)
16        project_snippet_url(snippet.project, snippet, *args)
17      else
18        new_args = snippet_query_params(snippet, *args)
19        snippet_url(snippet, *new_args)
20      end
21    end
22
23    def gitlab_dashboard_snippets_path(snippet, *args)
24      if snippet.is_a?(ProjectSnippet)
25        project_snippets_path(snippet.project, *args)
26      else
27        dashboard_snippets_path
28      end
29    end
30
31    def gitlab_raw_snippet_path(snippet, *args)
32      if snippet.is_a?(ProjectSnippet)
33        raw_project_snippet_path(snippet.project, snippet, *args)
34      else
35        new_args = snippet_query_params(snippet, *args)
36        raw_snippet_path(snippet, *new_args)
37      end
38    end
39
40    def gitlab_raw_snippet_url(snippet, *args)
41      if snippet.is_a?(ProjectSnippet)
42        raw_project_snippet_url(snippet.project, snippet, *args)
43      else
44        new_args = snippet_query_params(snippet, *args)
45        raw_snippet_url(snippet, *new_args)
46      end
47    end
48
49    def gitlab_raw_snippet_blob_url(snippet, path, ref = nil, **options)
50      params = {
51        snippet_id: snippet,
52        ref: ref || snippet.default_branch,
53        path: path
54      }
55
56      if snippet.is_a?(ProjectSnippet)
57        project_snippet_blob_raw_url(snippet.project, **params, **options)
58      else
59        snippet_blob_raw_url(**params, **options)
60      end
61    end
62
63    def gitlab_raw_snippet_blob_path(snippet, path, ref = nil, **options)
64      gitlab_raw_snippet_blob_url(snippet, path, ref, only_path: true, **options)
65    end
66
67    def gitlab_snippet_notes_path(snippet, *args)
68      new_args = snippet_query_params(snippet, *args)
69      snippet_notes_path(snippet, *new_args)
70    end
71
72    def gitlab_snippet_notes_url(snippet, *args)
73      new_args = snippet_query_params(snippet, *args)
74      snippet_notes_url(snippet, *new_args)
75    end
76
77    def gitlab_snippet_note_path(snippet, note, *args)
78      new_args = snippet_query_params(snippet, *args)
79      snippet_note_path(snippet, note, *new_args)
80    end
81
82    def gitlab_snippet_note_url(snippet, note, *args)
83      new_args = snippet_query_params(snippet, *args)
84      snippet_note_url(snippet, note, *new_args)
85    end
86
87    def gitlab_toggle_award_emoji_snippet_note_path(snippet, note, *args)
88      new_args = snippet_query_params(snippet, *args)
89      toggle_award_emoji_snippet_note_path(snippet, note, *new_args)
90    end
91
92    def gitlab_toggle_award_emoji_snippet_note_url(snippet, note, *args)
93      new_args = snippet_query_params(snippet, *args)
94      toggle_award_emoji_snippet_note_url(snippet, note, *new_args)
95    end
96
97    def gitlab_toggle_award_emoji_snippet_path(snippet, *args)
98      new_args = snippet_query_params(snippet, *args)
99      toggle_award_emoji_snippet_path(snippet, *new_args)
100    end
101
102    def gitlab_toggle_award_emoji_snippet_url(snippet, *args)
103      new_args = snippet_query_params(snippet, *args)
104      toggle_award_emoji_snippet_url(snippet, *new_args)
105    end
106
107    def preview_markdown_path(parent, *args)
108      return group_preview_markdown_path(parent, *args) if parent.is_a?(Group)
109
110      if @snippet.is_a?(PersonalSnippet)
111        preview_markdown_snippets_path
112      else
113        preview_markdown_project_path(parent, *args)
114      end
115    end
116
117    def toggle_award_emoji_personal_snippet_path(*args)
118      toggle_award_emoji_snippet_path(*args)
119    end
120
121    def toggle_award_emoji_project_project_snippet_path(*args)
122      toggle_award_emoji_project_snippet_path(*args)
123    end
124
125    def toggle_award_emoji_project_project_snippet_url(*args)
126      toggle_award_emoji_project_snippet_url(*args)
127    end
128
129    private
130
131    def snippet_query_params(snippet, *args)
132      opts = case args.last
133             when Hash
134               args.pop
135             when ActionController::Parameters
136               args.pop.to_h
137             else
138               {}
139             end
140
141      args << opts
142    end
143  end
144end
145