##// END OF EJS Templates
summary: use the same method to trim the messages as in changelog....
marcink -
r494:5c3d69c7 default
parent child Browse files
Show More
@@ -1,418 +1,418 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2
2
3 <%inherit file="/base/base.html"/>
3 <%inherit file="/base/base.html"/>
4
4
5 <%def name="title()">
5 <%def name="title()">
6 ${_('%s Changelog') % c.repo_name}
6 ${_('%s Changelog') % c.repo_name}
7 %if c.changelog_for_path:
7 %if c.changelog_for_path:
8 /${c.changelog_for_path}
8 /${c.changelog_for_path}
9 %endif
9 %endif
10 %if c.rhodecode_name:
10 %if c.rhodecode_name:
11 &middot; ${h.branding(c.rhodecode_name)}
11 &middot; ${h.branding(c.rhodecode_name)}
12 %endif
12 %endif
13 </%def>
13 </%def>
14
14
15 <%def name="breadcrumbs_links()">
15 <%def name="breadcrumbs_links()">
16 %if c.changelog_for_path:
16 %if c.changelog_for_path:
17 /${c.changelog_for_path}
17 /${c.changelog_for_path}
18 %endif
18 %endif
19 ${ungettext('showing %d out of %d commit', 'showing %d out of %d commits', c.showing_commits) % (c.showing_commits, c.total_cs)}
19 ${ungettext('showing %d out of %d commit', 'showing %d out of %d commits', c.showing_commits) % (c.showing_commits, c.total_cs)}
20 </%def>
20 </%def>
21
21
22 <%def name="menu_bar_nav()">
22 <%def name="menu_bar_nav()">
23 ${self.menu_items(active='repositories')}
23 ${self.menu_items(active='repositories')}
24 </%def>
24 </%def>
25
25
26 <%def name="menu_bar_subnav()">
26 <%def name="menu_bar_subnav()">
27 ${self.repo_menu(active='changelog')}
27 ${self.repo_menu(active='changelog')}
28 </%def>
28 </%def>
29
29
30 <%def name="main()">
30 <%def name="main()">
31
31
32 <div class="box">
32 <div class="box">
33 <div class="title">
33 <div class="title">
34 ${self.repo_page_title(c.rhodecode_db_repo)}
34 ${self.repo_page_title(c.rhodecode_db_repo)}
35 <ul class="links">
35 <ul class="links">
36 <li>
36 <li>
37 <a href="#" class="btn btn-small" id="rev_range_container" style="display:none;"></a>
37 <a href="#" class="btn btn-small" id="rev_range_container" style="display:none;"></a>
38 %if c.rhodecode_db_repo.fork:
38 %if c.rhodecode_db_repo.fork:
39 <span>
39 <span>
40 <a id="compare_fork_button"
40 <a id="compare_fork_button"
41 title="${_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name)}"
41 title="${_('Compare fork with %s' % c.rhodecode_db_repo.fork.repo_name)}"
42 class="btn btn-small"
42 class="btn btn-small"
43 href="${h.url('compare_url',
43 href="${h.url('compare_url',
44 repo_name=c.rhodecode_db_repo.fork.repo_name,
44 repo_name=c.rhodecode_db_repo.fork.repo_name,
45 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
45 source_ref_type=c.rhodecode_db_repo.landing_rev[0],
46 source_ref=c.rhodecode_db_repo.landing_rev[1],
46 source_ref=c.rhodecode_db_repo.landing_rev[1],
47 target_repo=c.repo_name,
47 target_repo=c.repo_name,
48 target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
48 target_ref_type='branch' if request.GET.get('branch') else c.rhodecode_db_repo.landing_rev[0],
49 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
49 target_ref=request.GET.get('branch') or c.rhodecode_db_repo.landing_rev[1],
50 merge=1)
50 merge=1)
51 }">
51 }">
52 <i class="icon-loop"></i>
52 <i class="icon-loop"></i>
53 ${_('Compare fork with Parent (%s)' % c.rhodecode_db_repo.fork.repo_name)}
53 ${_('Compare fork with Parent (%s)' % c.rhodecode_db_repo.fork.repo_name)}
54 </a>
54 </a>
55 </span>
55 </span>
56 %endif
56 %endif
57
57
58 ## pr open link
58 ## pr open link
59 %if h.is_hg(c.rhodecode_repo) or h.is_git(c.rhodecode_repo):
59 %if h.is_hg(c.rhodecode_repo) or h.is_git(c.rhodecode_repo):
60 <span>
60 <span>
61 <a id="open_new_pull_request" class="btn btn-small btn-success" href="${h.url('pullrequest_home',repo_name=c.repo_name)}">
61 <a id="open_new_pull_request" class="btn btn-small btn-success" href="${h.url('pullrequest_home',repo_name=c.repo_name)}">
62 ${_('Open new pull request')}
62 ${_('Open new pull request')}
63 </a>
63 </a>
64 </span>
64 </span>
65 %endif
65 %endif
66
66
67 ## clear selection
67 ## clear selection
68 <div title="${_('Clear selection')}" class="btn" id="rev_range_clear" style="display:none">
68 <div title="${_('Clear selection')}" class="btn" id="rev_range_clear" style="display:none">
69 ${_('Clear selection')}
69 ${_('Clear selection')}
70 </div>
70 </div>
71
71
72 </li>
72 </li>
73 </ul>
73 </ul>
74 </div>
74 </div>
75
75
76 % if c.pagination:
76 % if c.pagination:
77
77
78 <div class="graph-header">
78 <div class="graph-header">
79 <div id="filter_changelog">
79 <div id="filter_changelog">
80 ${h.hidden('branch_filter')}
80 ${h.hidden('branch_filter')}
81 %if c.selected_name:
81 %if c.selected_name:
82 <div class="btn btn-default" id="clear_filter" >
82 <div class="btn btn-default" id="clear_filter" >
83 ${_('Clear filter')}
83 ${_('Clear filter')}
84 </div>
84 </div>
85 %endif
85 %endif
86 </div>
86 </div>
87 ${self.breadcrumbs('breadcrumbs_light')}
87 ${self.breadcrumbs('breadcrumbs_light')}
88 </div>
88 </div>
89
89
90 <div id="graph">
90 <div id="graph">
91 <div class="graph-col-wrapper">
91 <div class="graph-col-wrapper">
92 <div id="graph_nodes">
92 <div id="graph_nodes">
93 <div id="graph_canvas" data-graph='${c.jsdata|n}'></div>
93 <div id="graph_canvas" data-graph='${c.jsdata|n}'></div>
94 </div>
94 </div>
95 <div id="graph_content" class="main-content graph_full_width">
95 <div id="graph_content" class="main-content graph_full_width">
96
96
97 <div class="table">
97 <div class="table">
98 <table id="changesets" class="rctable">
98 <table id="changesets" class="rctable">
99 <tr>
99 <tr>
100 ## checkbox
100 ## checkbox
101 <th></th>
101 <th></th>
102 <th colspan="2"></th>
102 <th colspan="2"></th>
103
103
104 <th>${_('Commit')}</th>
104 <th>${_('Commit')}</th>
105 ## commit message expand arrow
105 ## commit message expand arrow
106 <th></th>
106 <th></th>
107 <th>${_('Commit Message')}</th>
107 <th>${_('Commit Message')}</th>
108
108
109 <th>${_('Age')}</th>
109 <th>${_('Age')}</th>
110 <th>${_('Author')}</th>
110 <th>${_('Author')}</th>
111
111
112 <th>${_('Refs')}</th>
112 <th>${_('Refs')}</th>
113 </tr>
113 </tr>
114 <tbody>
114 <tbody>
115 %for cnt,commit in enumerate(c.pagination):
115 %for cnt,commit in enumerate(c.pagination):
116 <tr id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
116 <tr id="chg_${cnt+1}" class="container ${'tablerow%s' % (cnt%2)}">
117
117
118 <td class="td-checkbox">
118 <td class="td-checkbox">
119 ${h.checkbox(commit.raw_id,class_="commit-range")}
119 ${h.checkbox(commit.raw_id,class_="commit-range")}
120 </td>
120 </td>
121 <td class="td-status">
121 <td class="td-status">
122
122
123 %if c.statuses.get(commit.raw_id):
123 %if c.statuses.get(commit.raw_id):
124 <div class="changeset-status-ico">
124 <div class="changeset-status-ico">
125 %if c.statuses.get(commit.raw_id)[2]:
125 %if c.statuses.get(commit.raw_id)[2]:
126 <a class="tooltip" title="${_('Commit status: %s\nClick to open associated pull request #%s') % (h.commit_status_lbl(c.statuses.get(commit.raw_id)[0]), c.statuses.get(commit.raw_id)[2])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(commit.raw_id)[3],pull_request_id=c.statuses.get(commit.raw_id)[2])}">
126 <a class="tooltip" title="${_('Commit status: %s\nClick to open associated pull request #%s') % (h.commit_status_lbl(c.statuses.get(commit.raw_id)[0]), c.statuses.get(commit.raw_id)[2])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(commit.raw_id)[3],pull_request_id=c.statuses.get(commit.raw_id)[2])}">
127 <div class="${'flag_status %s' % c.statuses.get(commit.raw_id)[0]}"></div>
127 <div class="${'flag_status %s' % c.statuses.get(commit.raw_id)[0]}"></div>
128 </a>
128 </a>
129 %else:
129 %else:
130 <a class="tooltip" title="${_('Commit status: %s') % h.commit_status_lbl(c.statuses.get(commit.raw_id)[0])}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=commit.raw_id,anchor='comment-%s' % c.comments[commit.raw_id][0].comment_id)}">
130 <a class="tooltip" title="${_('Commit status: %s') % h.commit_status_lbl(c.statuses.get(commit.raw_id)[0])}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=commit.raw_id,anchor='comment-%s' % c.comments[commit.raw_id][0].comment_id)}">
131 <div class="${'flag_status %s' % c.statuses.get(commit.raw_id)[0]}"></div>
131 <div class="${'flag_status %s' % c.statuses.get(commit.raw_id)[0]}"></div>
132 </a>
132 </a>
133 %endif
133 %endif
134 </div>
134 </div>
135 %else:
135 %else:
136 <div class="tooltip flag_status not_reviewed" title="${_('Commit status: Not Reviewed')}"></div>
136 <div class="tooltip flag_status not_reviewed" title="${_('Commit status: Not Reviewed')}"></div>
137 %endif
137 %endif
138 </td>
138 </td>
139 <td class="td-comments comments-col">
139 <td class="td-comments comments-col">
140 %if c.comments.get(commit.raw_id):
140 %if c.comments.get(commit.raw_id):
141 <a title="${_('Commit has comments')}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=commit.raw_id,anchor='comment-%s' % c.comments[commit.raw_id][0].comment_id)}">
141 <a title="${_('Commit has comments')}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=commit.raw_id,anchor='comment-%s' % c.comments[commit.raw_id][0].comment_id)}">
142 <i class="icon-comment icon-comment-colored"></i> ${len(c.comments[commit.raw_id])}
142 <i class="icon-comment icon-comment-colored"></i> ${len(c.comments[commit.raw_id])}
143 </a>
143 </a>
144 %endif
144 %endif
145 </td>
145 </td>
146 <td class="td-hash">
146 <td class="td-hash">
147 <code>
147 <code>
148 <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=commit.raw_id)}">
148 <a href="${h.url('changeset_home',repo_name=c.repo_name,revision=commit.raw_id)}">
149 <span class="commit_hash">${h.show_id(commit)}</span>
149 <span class="commit_hash">${h.show_id(commit)}</span>
150 </a>
150 </a>
151 </code>
151 </code>
152 </td>
152 </td>
153 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_('Expand commit message')}">
153 <td class="td-message expand_commit" data-commit-id="${commit.raw_id}" title="${_('Expand commit message')}">
154 <div class="show_more_col">
154 <div class="show_more_col">
155 <i class="show_more"></i>&nbsp;
155 <i class="show_more"></i>&nbsp;
156 </div>
156 </div>
157 </td>
157 </td>
158 <td class="td-description mid">
158 <td class="td-description mid">
159 <div class="log-container truncate-wrap">
159 <div class="log-container truncate-wrap">
160 <div class="message truncate" id="c-${commit.raw_id}">${h.urlify_commit_message(commit.message, c.repo_name)}</div>
160 <div class="message truncate" id="c-${commit.raw_id}">${h.urlify_commit_message(commit.message, c.repo_name)}</div>
161 </div>
161 </div>
162 </td>
162 </td>
163
163
164 <td class="td-time">
164 <td class="td-time">
165 ${h.age_component(commit.date)}
165 ${h.age_component(commit.date)}
166 </td>
166 </td>
167 <td class="td-user">
167 <td class="td-user">
168 ${self.gravatar_with_user(commit.author)}
168 ${self.gravatar_with_user(commit.author)}
169 </td>
169 </td>
170
170
171 <td class="td-tags tags-col truncate-wrap">
171 <td class="td-tags tags-col truncate-wrap">
172 <div class="truncate tags-truncate" id="t-${commit.raw_id}">
172 <div class="truncate tags-truncate" id="t-${commit.raw_id}">
173 ## branch
173 ## branch
174 %if commit.branch:
174 %if commit.branch:
175 <span class="branchtag tag" title="${_('Branch %s') % commit.branch}">
175 <span class="branchtag tag" title="${_('Branch %s') % commit.branch}">
176 <a href="${h.url('changelog_home',repo_name=c.repo_name,branch=commit.branch)}"><i class="icon-code-fork"></i>${h.shorter(commit.branch)}</a>
176 <a href="${h.url('changelog_home',repo_name=c.repo_name,branch=commit.branch)}"><i class="icon-code-fork"></i>${h.shorter(commit.branch)}</a>
177 </span>
177 </span>
178 %endif
178 %endif
179
179
180 ## bookmarks
180 ## bookmarks
181 %if h.is_hg(c.rhodecode_repo):
181 %if h.is_hg(c.rhodecode_repo):
182 %for book in commit.bookmarks:
182 %for book in commit.bookmarks:
183 <span class="tag booktag" title="${_('Bookmark %s') % book}">
183 <span class="tag booktag" title="${_('Bookmark %s') % book}">
184 <a href="${h.url('files_home',repo_name=c.repo_name,revision=commit.raw_id)}"><i class="icon-bookmark"></i>${h.shorter(book)}</a>
184 <a href="${h.url('files_home',repo_name=c.repo_name,revision=commit.raw_id)}"><i class="icon-bookmark"></i>${h.shorter(book)}</a>
185 </span>
185 </span>
186 %endfor
186 %endfor
187 %endif
187 %endif
188
188
189 ## tags
189 ## tags
190 %for tag in commit.tags:
190 %for tag in commit.tags:
191 <span class="tagtag tag" title="${_('Tag %s') % tag}">
191 <span class="tagtag tag" title="${_('Tag %s') % tag}">
192 <a href="${h.url('files_home',repo_name=c.repo_name,revision=commit.raw_id)}"><i class="icon-tag"></i>${h.shorter(tag)}</a>
192 <a href="${h.url('files_home',repo_name=c.repo_name,revision=commit.raw_id)}"><i class="icon-tag"></i>${h.shorter(tag)}</a>
193 </span>
193 </span>
194 %endfor
194 %endfor
195
195
196 </div>
196 </div>
197 </td>
197 </td>
198 </tr>
198 </tr>
199 %endfor
199 %endfor
200 </tbody>
200 </tbody>
201 </table>
201 </table>
202 </div>
202 </div>
203 </div>
203 </div>
204 </div>
204 </div>
205 <div class="pagination-wh pagination-left">
205 <div class="pagination-wh pagination-left">
206 ${c.pagination.pager('$link_previous ~2~ $link_next')}
206 ${c.pagination.pager('$link_previous ~2~ $link_next')}
207 </div>
207 </div>
208
208
209 <script type="text/javascript" src="${h.asset('js/jquery.commits-graph.js')}"></script>
209 <script type="text/javascript" src="${h.asset('js/jquery.commits-graph.js')}"></script>
210 <script type="text/javascript">
210 <script type="text/javascript">
211 var cache = {};
211 var cache = {};
212 $(function(){
212 $(function(){
213
213
214 // Create links to commit ranges when range checkboxes are selected
214 // Create links to commit ranges when range checkboxes are selected
215 var $commitCheckboxes = $('.commit-range');
215 var $commitCheckboxes = $('.commit-range');
216 // cache elements
216 // cache elements
217 var $commitRangeContainer = $('#rev_range_container');
217 var $commitRangeContainer = $('#rev_range_container');
218 var $commitRangeClear = $('#rev_range_clear');
218 var $commitRangeClear = $('#rev_range_clear');
219
219
220 var checkboxRangeSelector = function(e){
220 var checkboxRangeSelector = function(e){
221 var selectedCheckboxes = [];
221 var selectedCheckboxes = [];
222 for (pos in $commitCheckboxes){
222 for (pos in $commitCheckboxes){
223 if($commitCheckboxes[pos].checked){
223 if($commitCheckboxes[pos].checked){
224 selectedCheckboxes.push($commitCheckboxes[pos]);
224 selectedCheckboxes.push($commitCheckboxes[pos]);
225 }
225 }
226 }
226 }
227 var open_new_pull_request = $('#open_new_pull_request');
227 var open_new_pull_request = $('#open_new_pull_request');
228 if(open_new_pull_request){
228 if(open_new_pull_request){
229 var selected_changes = selectedCheckboxes.length;
229 var selected_changes = selectedCheckboxes.length;
230 if (selected_changes > 1 || selected_changes == 1 && templateContext.repo_type != 'hg') {
230 if (selected_changes > 1 || selected_changes == 1 && templateContext.repo_type != 'hg') {
231 open_new_pull_request.hide();
231 open_new_pull_request.hide();
232 } else {
232 } else {
233 if (selected_changes == 1) {
233 if (selected_changes == 1) {
234 open_new_pull_request.html(_gettext('Open new pull request for selected commit'));
234 open_new_pull_request.html(_gettext('Open new pull request for selected commit'));
235 } else if (selected_changes == 0) {
235 } else if (selected_changes == 0) {
236 open_new_pull_request.html(_gettext('Open new pull request'));
236 open_new_pull_request.html(_gettext('Open new pull request'));
237 }
237 }
238 open_new_pull_request.show();
238 open_new_pull_request.show();
239 }
239 }
240 }
240 }
241
241
242 if (selectedCheckboxes.length>0){
242 if (selectedCheckboxes.length>0){
243 var revEnd = selectedCheckboxes[0].name;
243 var revEnd = selectedCheckboxes[0].name;
244 var revStart = selectedCheckboxes[selectedCheckboxes.length-1].name;
244 var revStart = selectedCheckboxes[selectedCheckboxes.length-1].name;
245 var url = pyroutes.url('changeset_home',
245 var url = pyroutes.url('changeset_home',
246 {'repo_name': '${c.repo_name}',
246 {'repo_name': '${c.repo_name}',
247 'revision': revStart+'...'+revEnd});
247 'revision': revStart+'...'+revEnd});
248
248
249 var link = (revStart == revEnd)
249 var link = (revStart == revEnd)
250 ? _gettext('Show selected commit __S')
250 ? _gettext('Show selected commit __S')
251 : _gettext('Show selected commits __S ... __E');
251 : _gettext('Show selected commits __S ... __E');
252
252
253 link = link.replace('__S', revStart.substr(0,6));
253 link = link.replace('__S', revStart.substr(0,6));
254 link = link.replace('__E', revEnd.substr(0,6));
254 link = link.replace('__E', revEnd.substr(0,6));
255
255
256 $commitRangeContainer
256 $commitRangeContainer
257 .attr('href',url)
257 .attr('href',url)
258 .html(link)
258 .html(link)
259 .show();
259 .show();
260
260
261 $commitRangeClear.show();
261 $commitRangeClear.show();
262 var _url = pyroutes.url('pullrequest_home',
262 var _url = pyroutes.url('pullrequest_home',
263 {'repo_name': '${c.repo_name}',
263 {'repo_name': '${c.repo_name}',
264 'commit': revEnd});
264 'commit': revEnd});
265 open_new_pull_request.attr('href', _url);
265 open_new_pull_request.attr('href', _url);
266 $('#compare_fork_button').hide();
266 $('#compare_fork_button').hide();
267 } else {
267 } else {
268 $commitRangeContainer.hide();
268 $commitRangeContainer.hide();
269 $commitRangeClear.hide();
269 $commitRangeClear.hide();
270
270
271 %if c.branch_name:
271 %if c.branch_name:
272 var _url = pyroutes.url('pullrequest_home',
272 var _url = pyroutes.url('pullrequest_home',
273 {'repo_name': '${c.repo_name}',
273 {'repo_name': '${c.repo_name}',
274 'branch':'${c.branch_name}'});
274 'branch':'${c.branch_name}'});
275 open_new_pull_request.attr('href', _url);
275 open_new_pull_request.attr('href', _url);
276 %else:
276 %else:
277 var _url = pyroutes.url('pullrequest_home',
277 var _url = pyroutes.url('pullrequest_home',
278 {'repo_name': '${c.repo_name}'});
278 {'repo_name': '${c.repo_name}'});
279 open_new_pull_request.attr('href', _url);
279 open_new_pull_request.attr('href', _url);
280 %endif
280 %endif
281 $('#compare_fork_button').show();
281 $('#compare_fork_button').show();
282 }
282 }
283 };
283 };
284
284
285 $commitCheckboxes.on('click', checkboxRangeSelector);
285 $commitCheckboxes.on('click', checkboxRangeSelector);
286
286
287 $commitRangeClear.on('click',function(e) {
287 $commitRangeClear.on('click',function(e) {
288 $commitCheckboxes.attr('checked', false)
288 $commitCheckboxes.attr('checked', false)
289 checkboxRangeSelector();
289 checkboxRangeSelector();
290 e.preventDefault();
290 e.preventDefault();
291 });
291 });
292
292
293 // make sure the buttons are consistent when navigate back and forth
293 // make sure the buttons are consistent when navigate back and forth
294 checkboxRangeSelector();
294 checkboxRangeSelector();
295
295
296
296
297 var msgs = $('.message');
297 var msgs = $('.message');
298 // get first element height
298 // get first element height
299 var el = $('#graph_content .container')[0];
299 var el = $('#graph_content .container')[0];
300 var row_h = el.clientHeight;
300 var row_h = el.clientHeight;
301 for (var i=0; i < msgs.length; i++) {
301 for (var i=0; i < msgs.length; i++) {
302 var m = msgs[i];
302 var m = msgs[i];
303
303
304 var h = m.clientHeight;
304 var h = m.clientHeight;
305 var pad = $(m).css('padding');
305 var pad = $(m).css('padding');
306 if (h > row_h) {
306 if (h > row_h) {
307 var offset = row_h - (h+12);
307 var offset = row_h - (h+12);
308 $(m.nextElementSibling).css('display','block');
308 $(m.nextElementSibling).css('display','block');
309 $(m.nextElementSibling).css('margin-top',offset+'px');
309 $(m.nextElementSibling).css('margin-top',offset+'px');
310 }
310 }
311 }
311 }
312
312
313 $('.expand_commit').on('click',function(e){
313 $('.expand_commit').on('click',function(e){
314 var target_expand = $(this);
314 var target_expand = $(this);
315 var cid = target_expand.data('commitId');
315 var cid = target_expand.data('commitId');
316
316
317 if (target_expand.hasClass('open')){
317 if (target_expand.hasClass('open')){
318 $('#c-'+cid).css({'height': '1.5em', 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow':'hidden'});
318 $('#c-'+cid).css({'height': '1.5em', 'white-space': 'nowrap', 'text-overflow': 'ellipsis', 'overflow':'hidden'});
319 $('#t-'+cid).css({'height': 'auto', 'line-height': '.9em', 'text-overflow': 'ellipsis', 'overflow':'hidden', 'white-space':'nowrap'});
319 $('#t-'+cid).css({'height': 'auto', 'line-height': '.9em', 'text-overflow': 'ellipsis', 'overflow':'hidden', 'white-space':'nowrap'});
320 target_expand.removeClass('open');
320 target_expand.removeClass('open');
321 }
321 }
322 else {
322 else {
323 $('#c-'+cid).css({'height': 'auto', 'white-space': 'pre-line', 'text-overflow': 'initial', 'overflow':'visible'});
323 $('#c-'+cid).css({'height': 'auto', 'white-space': 'pre-line', 'text-overflow': 'initial', 'overflow':'visible'});
324 $('#t-'+cid).css({'height': 'auto', 'max-height': 'none', 'text-overflow': 'initial', 'overflow':'visible', 'white-space':'normal'});
324 $('#t-'+cid).css({'height': 'auto', 'max-height': 'none', 'text-overflow': 'initial', 'overflow':'visible', 'white-space':'normal'});
325 target_expand.addClass('open');
325 target_expand.addClass('open');
326 }
326 }
327 // redraw the graph
327 // redraw the graph
328 graph_options.height = $("#changesets").height();
328 graph_options.height = $("#changesets").height();
329 $("canvas").remove();
329 $("canvas").remove();
330 $("[data-graph]").commits(graph_options);
330 $("[data-graph]").commits(graph_options);
331 });
331 });
332
332
333 $("#clear_filter").on("click", function() {
333 $("#clear_filter").on("click", function() {
334 var filter = {'repo_name': '${c.repo_name}'};
334 var filter = {'repo_name': '${c.repo_name}'};
335 window.location = pyroutes.url('changelog_home', filter);
335 window.location = pyroutes.url('changelog_home', filter);
336 });
336 });
337
337
338 $("#branch_filter").select2({
338 $("#branch_filter").select2({
339 'dropdownAutoWidth': true,
339 'dropdownAutoWidth': true,
340 'width': 'resolve',
340 'width': 'resolve',
341 'placeholder': "${c.selected_name or _('Filter changelog')}",
341 'placeholder': "${c.selected_name or _('Filter changelog')}",
342 containerCssClass: "drop-menu",
342 containerCssClass: "drop-menu",
343 dropdownCssClass: "drop-menu-dropdown",
343 dropdownCssClass: "drop-menu-dropdown",
344 query: function(query){
344 query: function(query){
345 var key = 'cache';
345 var key = 'cache';
346 var cached = cache[key] ;
346 var cached = cache[key] ;
347 if(cached) {
347 if(cached) {
348 var data = {results: []};
348 var data = {results: []};
349 //filter results
349 //filter results
350 $.each(cached.results, function(){
350 $.each(cached.results, function(){
351 var section = this.text;
351 var section = this.text;
352 var children = [];
352 var children = [];
353 $.each(this.children, function(){
353 $.each(this.children, function(){
354 if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
354 if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
355 children.push({'id': this.id, 'text': this.text, 'type': this.type})
355 children.push({'id': this.id, 'text': this.text, 'type': this.type})
356 }
356 }
357 });
357 });
358 data.results.push({'text': section, 'children': children});
358 data.results.push({'text': section, 'children': children});
359 query.callback({results: data.results});
359 query.callback({results: data.results});
360 });
360 });
361 }else{
361 }else{
362 $.ajax({
362 $.ajax({
363 url: pyroutes.url('repo_refs_changelog_data', {'repo_name': '${c.repo_name}'}),
363 url: pyroutes.url('repo_refs_changelog_data', {'repo_name': '${c.repo_name}'}),
364 data: {},
364 data: {},
365 dataType: 'json',
365 dataType: 'json',
366 type: 'GET',
366 type: 'GET',
367 success: function(data) {
367 success: function(data) {
368 cache[key] = data;
368 cache[key] = data;
369 query.callback({results: data.results});
369 query.callback({results: data.results});
370 }
370 }
371 })
371 })
372 }
372 }
373 }
373 }
374 });
374 });
375
375
376 $('#branch_filter').on('change', function(e){
376 $('#branch_filter').on('change', function(e){
377 var data = $('#branch_filter').select2('data');
377 var data = $('#branch_filter').select2('data');
378 var selected = data.text;
378 var selected = data.text;
379 var filter = {'repo_name': '${c.repo_name}'};
379 var filter = {'repo_name': '${c.repo_name}'};
380 if(data.type == 'branch' || data.type == 'branch_closed'){
380 if(data.type == 'branch' || data.type == 'branch_closed'){
381 filter["branch"] = selected;
381 filter["branch"] = selected;
382 }
382 }
383 else if (data.type == 'book'){
383 else if (data.type == 'book'){
384 filter["bookmark"] = selected;
384 filter["bookmark"] = selected;
385 }
385 }
386 window.location = pyroutes.url('changelog_home', filter);
386 window.location = pyroutes.url('changelog_home', filter);
387 });
387 });
388
388
389 // Determine max number of edges per row in graph
389 // Determine max number of edges per row in graph
390 var jsdata = $.parseJSON($("[data-graph]").attr('data-graph'));
390 var jsdata = $.parseJSON($("[data-graph]").attr('data-graph'));
391 var edgeCount = 1;
391 var edgeCount = 1;
392 $.each(jsdata, function(i, item){
392 $.each(jsdata, function(i, item){
393 $.each(item[2], function(key, value) {
393 $.each(item[2], function(key, value) {
394 if (value[1] > edgeCount){
394 if (value[1] > edgeCount){
395 edgeCount = value[1];
395 edgeCount = value[1];
396 }
396 }
397 });
397 });
398 });
398 });
399 var x_step = Math.min(18, Math.floor(86 / edgeCount));
399 var x_step = Math.min(18, Math.floor(86 / edgeCount));
400 var graph_options = {
400 var graph_options = {
401 width: 100,
401 width: 100,
402 height: $("#changesets").height(),
402 height: $("#changesets").height(),
403 x_step: x_step,
403 x_step: x_step,
404 y_step: 42,
404 y_step: 42,
405 dotRadius: 3.5,
405 dotRadius: 3.5,
406 lineWidth: 2.5
406 lineWidth: 2.5
407 };
407 };
408 $("[data-graph]").commits(graph_options);
408 $("[data-graph]").commits(graph_options);
409
409
410 });
410 });
411
411
412 </script>
412 </script>
413 %else:
413 %else:
414 ${_('There are no changes yet')}
414 ${_('There are no changes yet')}
415 %endif
415 %endif
416 </div>
416 </div>
417 </div>
417 </div>
418 </%def>
418 </%def>
@@ -1,133 +1,136 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%namespace name="base" file="/base/base.html"/>
2 <%namespace name="base" file="/base/base.html"/>
3 %if c.repo_commits:
3 %if c.repo_commits:
4 <table class="rctable repo_summary table_disp">
4 <table class="rctable repo_summary table_disp">
5 <tr>
5 <tr>
6
6
7 <th class="status" colspan="2"></th>
7 <th class="status" colspan="2"></th>
8 <th>${_('Commit')}</th>
8 <th>${_('Commit')}</th>
9 <th>${_('Commit message')}</th>
9 <th>${_('Commit message')}</th>
10 <th>${_('Age')}</th>
10 <th>${_('Age')}</th>
11 <th>${_('Author')}</th>
11 <th>${_('Author')}</th>
12 <th>${_('Refs')}</th>
12 <th>${_('Refs')}</th>
13 </tr>
13 </tr>
14 %for cnt,cs in enumerate(c.repo_commits):
14 %for cnt,cs in enumerate(c.repo_commits):
15 <tr class="parity${cnt%2}">
15 <tr class="parity${cnt%2}">
16
16
17 <td class="td-status">
17 <td class="td-status">
18 %if c.statuses.get(cs.raw_id):
18 %if c.statuses.get(cs.raw_id):
19 <div class="changeset-status-ico shortlog">
19 <div class="changeset-status-ico shortlog">
20 %if c.statuses.get(cs.raw_id)[2]:
20 %if c.statuses.get(cs.raw_id)[2]:
21 <a class="tooltip" title="${_('Commit status: %s\nClick to open associated pull request #%s') % (c.statuses.get(cs.raw_id)[0], c.statuses.get(cs.raw_id)[2])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}">
21 <a class="tooltip" title="${_('Commit status: %s\nClick to open associated pull request #%s') % (c.statuses.get(cs.raw_id)[0], c.statuses.get(cs.raw_id)[2])}" href="${h.url('pullrequest_show',repo_name=c.statuses.get(cs.raw_id)[3],pull_request_id=c.statuses.get(cs.raw_id)[2])}">
22 <div class="${'flag_status %s' % c.statuses.get(cs.raw_id)[0]}"></div>
22 <div class="${'flag_status %s' % c.statuses.get(cs.raw_id)[0]}"></div>
23 </a>
23 </a>
24 %else:
24 %else:
25 <a class="tooltip" title="${_('Commit status: %s') % h.commit_status_lbl(c.statuses.get(cs.raw_id)[0])}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}">
25 <a class="tooltip" title="${_('Commit status: %s') % h.commit_status_lbl(c.statuses.get(cs.raw_id)[0])}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}">
26 <div class="${'flag_status %s' % c.statuses.get(cs.raw_id)[0]}"></div>
26 <div class="${'flag_status %s' % c.statuses.get(cs.raw_id)[0]}"></div>
27 </a>
27 </a>
28 %endif
28 %endif
29 </div>
29 </div>
30 %else:
30 %else:
31 <div class="tooltip flag_status not_reviewed" title="${_('Commit status: Not Reviewed')}"></div>
31 <div class="tooltip flag_status not_reviewed" title="${_('Commit status: Not Reviewed')}"></div>
32 %endif
32 %endif
33 </td>
33 </td>
34 <td class="td-comments">
34 <td class="td-comments">
35 %if c.comments.get(cs.raw_id,[]):
35 %if c.comments.get(cs.raw_id,[]):
36 <a title="${_('Commit has comments')}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}">
36 <a title="${_('Commit has comments')}" href="${h.url('changeset_home',repo_name=c.repo_name,revision=cs.raw_id,anchor='comment-%s' % c.comments[cs.raw_id][0].comment_id)}">
37 <i class="icon-comment icon-comment-colored"></i> ${len(c.comments[cs.raw_id])}
37 <i class="icon-comment icon-comment-colored"></i> ${len(c.comments[cs.raw_id])}
38 </a>
38 </a>
39 %endif
39 %endif
40 </td>
40 </td>
41 <td class="td-commit">
41 <td class="td-commit">
42 <pre><a href="${h.url('changeset_home', repo_name=c.repo_name, revision=cs.raw_id)}">${h.show_id(cs)}</a></pre>
42 <pre><a href="${h.url('changeset_home', repo_name=c.repo_name, revision=cs.raw_id)}">${h.show_id(cs)}</a></pre>
43 </td>
43 </td>
44 <td class="td-message">
44
45 ${h.urlify_commit_message(h.truncate(cs.message, 50), c.repo_name)}
45 <td class="td-description mid">
46 <div class="log-container truncate-wrap">
47 <div class="message truncate" id="c-${cs.raw_id}">${h.urlify_commit_message(cs.message, c.repo_name)}</div>
48 </div>
46 </td>
49 </td>
47
50
48 <td class="td-time">
51 <td class="td-time">
49 ${h.age_component(cs.date)}
52 ${h.age_component(cs.date)}
50 </td>
53 </td>
51 <td class="td-user author">
54 <td class="td-user author">
52 ${base.gravatar_with_user(cs.author)}
55 ${base.gravatar_with_user(cs.author)}
53 </td>
56 </td>
54
57
55 <td class="td-tags truncate-wrap">
58 <td class="td-tags truncate-wrap">
56 <div class="truncate tags-truncate"><div class="autoexpand">
59 <div class="truncate tags-truncate"><div class="autoexpand">
57 %if h.is_hg(c.rhodecode_repo):
60 %if h.is_hg(c.rhodecode_repo):
58 %for book in cs.bookmarks:
61 %for book in cs.bookmarks:
59 <span class="booktag tag" title="${_('Bookmark %s') % book}">
62 <span class="booktag tag" title="${_('Bookmark %s') % book}">
60 <a href="${h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id)}"><i class="icon-bookmark"></i>${h.shorter(book)}</a>
63 <a href="${h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id)}"><i class="icon-bookmark"></i>${h.shorter(book)}</a>
61 </span>
64 </span>
62 %endfor
65 %endfor
63 %endif
66 %endif
64 ## tags
67 ## tags
65 %for tag in cs.tags:
68 %for tag in cs.tags:
66 <span class="tagtag tag" title="${_('Tag %s') % tag}">
69 <span class="tagtag tag" title="${_('Tag %s') % tag}">
67 <a href="${h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id)}"><i class="icon-tag"></i>${h.shorter(tag)}</a>
70 <a href="${h.url('files_home',repo_name=c.repo_name,revision=cs.raw_id)}"><i class="icon-tag"></i>${h.shorter(tag)}</a>
68 </span>
71 </span>
69 %endfor
72 %endfor
70
73
71 ## branch
74 ## branch
72 %if cs.branch:
75 %if cs.branch:
73 <span class="branchtag tag" title="${_('Branch %s') % cs.branch}">
76 <span class="branchtag tag" title="${_('Branch %s') % cs.branch}">
74 <a href="${h.url('changelog_home',repo_name=c.repo_name,branch=cs.branch)}"><i class="icon-code-fork"></i>${h.shorter(cs.branch)}</a>
77 <a href="${h.url('changelog_home',repo_name=c.repo_name,branch=cs.branch)}"><i class="icon-code-fork"></i>${h.shorter(cs.branch)}</a>
75 </span>
78 </span>
76 %endif
79 %endif
77 </div>
80 </div>
78 </td>
81 </td>
79 </tr>
82 </tr>
80 %endfor
83 %endfor
81
84
82 </table>
85 </table>
83
86
84 <script type="text/javascript">
87 <script type="text/javascript">
85 $(document).pjax('#shortlog_data .pager_link','#shortlog_data', {timeout: 2000, scrollTo: false });
88 $(document).pjax('#shortlog_data .pager_link','#shortlog_data', {timeout: 2000, scrollTo: false });
86 $(document).on('pjax:success', function(){ timeagoActivate(); });
89 $(document).on('pjax:success', function(){ timeagoActivate(); });
87 </script>
90 </script>
88
91
89 <div class="pagination-wh pagination-left">
92 <div class="pagination-wh pagination-left">
90 ${c.repo_commits.pager('$link_previous ~2~ $link_next')}
93 ${c.repo_commits.pager('$link_previous ~2~ $link_next')}
91 </div>
94 </div>
92 %else:
95 %else:
93
96
94 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
97 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
95 <div class="quick_start">
98 <div class="quick_start">
96 <div class="fieldset">
99 <div class="fieldset">
97 <div class="left-label">${_('Add or upload files directly via RhodeCode:')}</div>
100 <div class="left-label">${_('Add or upload files directly via RhodeCode:')}</div>
98 <div class="right-content">
101 <div class="right-content">
99 <div id="add_node_id" class="add_node">
102 <div id="add_node_id" class="add_node">
100 <a href="${h.url('files_add_home',repo_name=c.repo_name,revision=0,f_path='', anchor='edit')}" class="btn btn-default">${_('Add New File')}</a>
103 <a href="${h.url('files_add_home',repo_name=c.repo_name,revision=0,f_path='', anchor='edit')}" class="btn btn-default">${_('Add New File')}</a>
101 </div>
104 </div>
102 </div>
105 </div>
103 %endif
106 %endif
104 </div>
107 </div>
105
108
106 %if not h.is_svn(c.rhodecode_repo):
109 %if not h.is_svn(c.rhodecode_repo):
107 <div class="fieldset">
110 <div class="fieldset">
108 <div class="left-label">${_('Push new repo:')}</div>
111 <div class="left-label">${_('Push new repo:')}</div>
109 <div class="right-content">
112 <div class="right-content">
110 <pre>
113 <pre>
111 ${c.rhodecode_repo.alias} clone ${c.clone_repo_url}
114 ${c.rhodecode_repo.alias} clone ${c.clone_repo_url}
112 ${c.rhodecode_repo.alias} add README # add first file
115 ${c.rhodecode_repo.alias} add README # add first file
113 ${c.rhodecode_repo.alias} commit -m "Initial" # commit with message
116 ${c.rhodecode_repo.alias} commit -m "Initial" # commit with message
114 ${c.rhodecode_repo.alias} push ${'origin master' if h.is_git(c.rhodecode_repo) else ''} # push changes back
117 ${c.rhodecode_repo.alias} push ${'origin master' if h.is_git(c.rhodecode_repo) else ''} # push changes back
115 </pre>
118 </pre>
116 </div>
119 </div>
117 </div>
120 </div>
118 <div class="fieldset">
121 <div class="fieldset">
119 <div class="left-label">${_('Existing repository?')}</div>
122 <div class="left-label">${_('Existing repository?')}</div>
120 <div class="right-content">
123 <div class="right-content">
121 <pre>
124 <pre>
122 %if h.is_git(c.rhodecode_repo):
125 %if h.is_git(c.rhodecode_repo):
123 git remote add origin ${c.clone_repo_url}
126 git remote add origin ${c.clone_repo_url}
124 git push -u origin master
127 git push -u origin master
125 %else:
128 %else:
126 hg push ${c.clone_repo_url}
129 hg push ${c.clone_repo_url}
127 %endif
130 %endif
128 </pre>
131 </pre>
129 </div>
132 </div>
130 </div>
133 </div>
131 %endif
134 %endif
132 </div>
135 </div>
133 %endif
136 %endif
General Comments 0
You need to be logged in to leave comments. Login now