Commit da5b0c91dc79136be4315cf61e5520692e19be8a
1 parent
685681e2
Exists in
master
and in
4 other branches
Move some decorator logic to helpers
Showing
2 changed files
with
90 additions
and
18 deletions
Show diff stats
app/helpers/commits_helper.rb
1 | 1 | module CommitsHelper |
2 | + # Returns a link to the commit author. If the author has a matching user and | |
3 | + # is a member of the current @project it will link to the team member page. | |
4 | + # Otherwise it will link to the author email as specified in the commit. | |
5 | + # | |
6 | + # options: | |
7 | + # avatar: true will prepend the avatar image | |
8 | + # size: size of the avatar image in px | |
9 | + def commit_author_link(commit, options = {}) | |
10 | + commit_person_link(commit, options.merge(source: :author)) | |
11 | + end | |
12 | + | |
13 | + # Just like #author_link but for the committer. | |
14 | + def commit_committer_link(commit, options = {}) | |
15 | + commit_person_link(commit, options.merge(source: :committer)) | |
16 | + end | |
17 | + | |
2 | 18 | def identification_type(line) |
3 | 19 | if line[0] == "+" |
4 | 20 | "new" |
... | ... | @@ -105,4 +121,62 @@ module CommitsHelper |
105 | 121 | line |
106 | 122 | end |
107 | 123 | end |
124 | + | |
125 | + # Breadcrumb links for a Project and, if applicable, a tree path | |
126 | + def commits_breadcrumbs | |
127 | + return unless @project && @ref | |
128 | + | |
129 | + # Add the root project link and the arrow icon | |
130 | + crumbs = content_tag(:li) do | |
131 | + content_tag(:span, nil, class: 'arrow') + | |
132 | + link_to(@project.name, project_commits_path(@project, @ref)) | |
133 | + end | |
134 | + | |
135 | + if @path | |
136 | + parts = @path.split('/') | |
137 | + | |
138 | + parts.each_with_index do |part, i| | |
139 | + crumbs += content_tag(:span, '/', class: 'divider') | |
140 | + crumbs += content_tag(:li) do | |
141 | + # The text is just the individual part, but the link needs all the parts before it | |
142 | + link_to part, project_commits_path(@project, tree_join(@ref, parts[0..i].join('/'))) | |
143 | + end | |
144 | + end | |
145 | + end | |
146 | + | |
147 | + crumbs.html_safe | |
148 | + end | |
149 | + | |
150 | + protected | |
151 | + | |
152 | + def no_commit_message | |
153 | + "--no commit message" | |
154 | + end | |
155 | + | |
156 | + # Private: Returns a link to a person. If the person has a matching user and | |
157 | + # is a member of the current @project it will link to the team member page. | |
158 | + # Otherwise it will link to the person email as specified in the commit. | |
159 | + # | |
160 | + # options: | |
161 | + # source: one of :author or :committer | |
162 | + # avatar: true will prepend the avatar image | |
163 | + # size: size of the avatar image in px | |
164 | + def commit_person_link(commit, options = {}) | |
165 | + source_name = commit.send "#{options[:source]}_name".to_sym | |
166 | + source_email = commit.send "#{options[:source]}_email".to_sym | |
167 | + text = if options[:avatar] | |
168 | + avatar = image_tag(gravatar_icon(source_email, options[:size]), class: "avatar #{"s#{options[:size]}" if options[:size]}", width: options[:size], alt: "") | |
169 | + %Q{#{avatar} <span class="commit-#{options[:source]}-name">#{source_name}</span>} | |
170 | + else | |
171 | + source_name | |
172 | + end | |
173 | + | |
174 | + user = User.where('name like ? or email like ?', source_name, source_email).first | |
175 | + | |
176 | + if user.nil? | |
177 | + mail_to(source_email, text.html_safe, class: "commit-#{options[:source]}-link") | |
178 | + else | |
179 | + link_to(text.html_safe, user_path(user), class: "commit-#{options[:source]}-link") | |
180 | + end | |
181 | + end | |
108 | 182 | end | ... | ... |
app/helpers/tree_helper.rb
... | ... | @@ -70,28 +70,26 @@ module TreeHelper |
70 | 70 | end |
71 | 71 | end |
72 | 72 | |
73 | - # Breadcrumb links for a Project and, if applicable, a tree path | |
74 | - def breadcrumbs | |
75 | - return unless @project && @ref | |
76 | - | |
77 | - # Add the root project link and the arrow icon | |
78 | - crumbs = content_tag(:li) do | |
79 | - content_tag(:span, nil, class: 'arrow') + | |
80 | - link_to(@project.name, project_commits_path(@project, @ref)) | |
81 | - end | |
73 | + def tree_breadcrumbs(tree, max_links = 2) | |
74 | + if tree.path | |
75 | + part_path = "" | |
76 | + parts = tree.path.split("\/") | |
77 | + | |
78 | + yield('..', nil) if parts.count > max_links | |
82 | 79 | |
83 | - if @path | |
84 | - parts = @path.split('/') | |
80 | + parts.each do |part| | |
81 | + part_path = File.join(part_path, part) unless part_path.empty? | |
82 | + part_path = part if part_path.empty? | |
85 | 83 | |
86 | - parts.each_with_index do |part, i| | |
87 | - crumbs += content_tag(:span, '/', class: 'divider') | |
88 | - crumbs += content_tag(:li) do | |
89 | - # The text is just the individual part, but the link needs all the parts before it | |
90 | - link_to part, project_commits_path(@project, tree_join(@ref, parts[0..i].join('/'))) | |
91 | - end | |
84 | + next unless parts.last(2).include?(part) if parts.count > max_links | |
85 | + yield(part, tree_join(tree.ref, part_path)) | |
92 | 86 | end |
93 | 87 | end |
88 | + end | |
94 | 89 | |
95 | - crumbs.html_safe | |
90 | + def up_dir_path tree | |
91 | + file = File.join(tree.path, "..") | |
92 | + tree_join(tree.ref, file) | |
96 | 93 | end |
94 | + | |
97 | 95 | end | ... | ... |