##// END OF EJS Templates
files: updated based on new design
marcink -
r3706:9aa2b595 new-ui
parent child Browse files
Show More
@@ -873,18 +873,17 b' class RepoFilesView(RepoAppView):'
873 self.db_repo_name, self.db_repo.repo_id, commit.raw_id, f_path)
873 self.db_repo_name, self.db_repo.repo_id, commit.raw_id, f_path)
874 return {'nodes': metadata}
874 return {'nodes': metadata}
875
875
876 def _create_references(
876 def _create_references(self, branches_or_tags, symbolic_reference, f_path, ref_type):
877 self, branches_or_tags, symbolic_reference, f_path):
878 items = []
877 items = []
879 for name, commit_id in branches_or_tags.items():
878 for name, commit_id in branches_or_tags.items():
880 sym_ref = symbolic_reference(commit_id, name, f_path)
879 sym_ref = symbolic_reference(commit_id, name, f_path, ref_type)
881 items.append((sym_ref, name))
880 items.append((sym_ref, name, ref_type))
882 return items
881 return items
883
882
884 def _symbolic_reference(self, commit_id, name, f_path):
883 def _symbolic_reference(self, commit_id, name, f_path, ref_type):
885 return commit_id
884 return commit_id
886
885
887 def _symbolic_reference_svn(self, commit_id, name, f_path):
886 def _symbolic_reference_svn(self, commit_id, name, f_path, ref_type):
888 new_f_path = vcspath.join(name, f_path)
887 new_f_path = vcspath.join(name, f_path)
889 return u'%s@%s' % (new_f_path, commit_id)
888 return u'%s@%s' % (new_f_path, commit_id)
890
889
@@ -914,7 +913,7 b' class RepoFilesView(RepoAppView):'
914 for commit in commits:
913 for commit in commits:
915 branch = ' (%s)' % commit.branch if commit.branch else ''
914 branch = ' (%s)' % commit.branch if commit.branch else ''
916 n_desc = 'r%s:%s%s' % (commit.idx, commit.short_id, branch)
915 n_desc = 'r%s:%s%s' % (commit.idx, commit.short_id, branch)
917 commits_group[0].append((commit.raw_id, n_desc,))
916 commits_group[0].append((commit.raw_id, n_desc, 'sha'))
918 history.append(commits_group)
917 history.append(commits_group)
919
918
920 symbolic_reference = self._symbolic_reference
919 symbolic_reference = self._symbolic_reference
@@ -930,11 +929,11 b' class RepoFilesView(RepoAppView):'
930 symbolic_reference = self._symbolic_reference_svn
929 symbolic_reference = self._symbolic_reference_svn
931
930
932 branches = self._create_references(
931 branches = self._create_references(
933 self.rhodecode_vcs_repo.branches, symbolic_reference, f_path)
932 self.rhodecode_vcs_repo.branches, symbolic_reference, f_path, 'branch')
934 branches_group = (branches, _("Branches"))
933 branches_group = (branches, _("Branches"))
935
934
936 tags = self._create_references(
935 tags = self._create_references(
937 self.rhodecode_vcs_repo.tags, symbolic_reference, f_path)
936 self.rhodecode_vcs_repo.tags, symbolic_reference, f_path, 'tag')
938 tags_group = (tags, _("Tags"))
937 tags_group = (tags, _("Tags"))
939
938
940 history.append(branches_group)
939 history.append(branches_group)
@@ -962,7 +961,7 b' class RepoFilesView(RepoAppView):'
962 for obj in file_history:
961 for obj in file_history:
963 res.append({
962 res.append({
964 'text': obj[1],
963 'text': obj[1],
965 'children': [{'id': o[0], 'text': o[1]} for o in obj[0]]
964 'children': [{'id': o[0], 'text': o[1], 'type': o[2]} for o in obj[0]]
966 })
965 })
967
966
968 data = {
967 data = {
@@ -199,6 +199,7 b' class _GetError(object):'
199 if form_errors and field_name in form_errors:
199 if form_errors and field_name in form_errors:
200 return literal(tmpl % form_errors.get(field_name))
200 return literal(tmpl % form_errors.get(field_name))
201
201
202
202 get_error = _GetError()
203 get_error = _GetError()
203
204
204
205
@@ -215,25 +216,21 b' class _ToolTip(object):'
215 tooltip_title = tooltip_title.replace('<', '&lt;').replace('>', '&gt;')
216 tooltip_title = tooltip_title.replace('<', '&lt;').replace('>', '&gt;')
216 return tooltip_title
217 return tooltip_title
217
218
219
218 tooltip = _ToolTip()
220 tooltip = _ToolTip()
219
221
220
222
221 def files_breadcrumbs(repo_name, commit_id, file_path, at_ref=None):
223 def files_breadcrumbs(repo_name, commit_id, file_path, at_ref=None, limit_items=False):
222 if isinstance(file_path, str):
224 if isinstance(file_path, str):
223 file_path = safe_unicode(file_path)
225 file_path = safe_unicode(file_path)
226
224 route_qry = {'at': at_ref} if at_ref else None
227 route_qry = {'at': at_ref} if at_ref else None
225
228
226 # TODO: johbo: Is this always a url like path, or is this operating
229 # first segment is a `..` link to repo files
227 # system dependent?
230 root_name = literal(u'<i class="icon-home"></i>')
228 path_segments = file_path.split('/')
229
230 repo_name_html = escape(repo_name)
231 if len(path_segments) == 1 and path_segments[0] == '':
232 url_segments = [repo_name_html]
233 else:
234 url_segments = [
231 url_segments = [
235 link_to(
232 link_to(
236 repo_name_html,
233 root_name,
237 route_path(
234 route_path(
238 'repo_files',
235 'repo_files',
239 repo_name=repo_name,
236 repo_name=repo_name,
@@ -242,6 +239,7 b' def files_breadcrumbs(repo_name, commit_'
242 _query=route_qry),
239 _query=route_qry),
243 )]
240 )]
244
241
242 path_segments = file_path.split('/')
245 last_cnt = len(path_segments) - 1
243 last_cnt = len(path_segments) - 1
246 for cnt, segment in enumerate(path_segments):
244 for cnt, segment in enumerate(path_segments):
247 if not segment:
245 if not segment:
@@ -262,7 +260,16 b' def files_breadcrumbs(repo_name, commit_'
262 else:
260 else:
263 url_segments.append(segment_html)
261 url_segments.append(segment_html)
264
262
265 return literal('/'.join(url_segments))
263 limited_url_segments = url_segments[:1] + ['...'] + url_segments[-5:]
264 if limit_items and len(limited_url_segments) < len(url_segments):
265 url_segments = limited_url_segments
266
267 full_path = file_path
268 icon = '<i class="file-breadcrumb-copy tooltip icon-clipboard clipboard-action" data-clipboard-text="{}" title="Copy the full path"></i>'.format(full_path)
269 if file_path == '':
270 return root_name
271 else:
272 return literal(' / '.join(url_segments) + icon)
266
273
267
274
268 def code_highlight(code, lexer, formatter, use_hl_filter=False):
275 def code_highlight(code, lexer, formatter, use_hl_filter=False):
@@ -2192,11 +2192,12 b' h3.files_location{'
2192 }
2192 }
2193 }
2193 }
2194
2194
2195 }
2196
2195 .select-index-number {
2197 .select-index-number {
2196 margin: 0 0 0 20px;
2198 margin: 0 0 0 20px;
2197 color: @grey3;
2199 color: @grey3;
2198 }
2200 }
2199 }
2200
2201
2201 .search_activate {
2202 .search_activate {
2202 display: table-cell;
2203 display: table-cell;
@@ -1,12 +1,12 b''
1 @font-face {
1 @font-face {
2 font-family: 'rcicons';
2 font-family: 'rcicons';
3
3
4 src: url('../fonts/RCIcons/rcicons.eot?73199028');
4 src: url('../fonts/RCIcons/rcicons.eot?9641970');
5 src: url('../fonts/RCIcons/rcicons.eot?73199028#iefix') format('embedded-opentype'),
5 src: url('../fonts/RCIcons/rcicons.eot?9641970#iefix') format('embedded-opentype'),
6 url('../fonts/RCIcons/rcicons.woff2?73199028') format('woff2'),
6 url('../fonts/RCIcons/rcicons.woff2?9641970') format('woff2'),
7 url('../fonts/RCIcons/rcicons.woff?73199028') format('woff'),
7 url('../fonts/RCIcons/rcicons.woff?9641970') format('woff'),
8 url('../fonts/RCIconst/rcicons.ttf?73199028') format('truetype'),
8 url('../fonts/RCIcons/rcicons.ttf?9641970') format('truetype'),
9 url('../fonts/RCIcons/rcicons.svg?73199028#rcicons') format('svg');
9 url('../fonts/RCIcons/rcicons.svg?9641970#rcicons') format('svg');
10
10
11 font-weight: normal;
11 font-weight: normal;
12 font-style: normal;
12 font-style: normal;
@@ -186,6 +186,7 b''
186 .icon-minus:before { content: '\e820'; } /* '' */
186 .icon-minus:before { content: '\e820'; } /* '' */
187 .icon-info-circled:before { content: '\e821'; } /* '' */
187 .icon-info-circled:before { content: '\e821'; } /* '' */
188 .icon-upload:before { content: '\e822'; } /* '' */
188 .icon-upload:before { content: '\e822'; } /* '' */
189 .icon-home:before { content: '\e823'; } /* '' */
189 .icon-git:before { content: '\e82a'; } /* '' */
190 .icon-git:before { content: '\e82a'; } /* '' */
190 .icon-hg:before { content: '\e82d'; } /* '' */
191 .icon-hg:before { content: '\e82d'; } /* '' */
191 .icon-svn:before { content: '\e82e'; } /* '' */
192 .icon-svn:before { content: '\e82e'; } /* '' */
@@ -425,7 +425,6 b''
425 }
425 }
426
426
427 .stats-info {
427 .stats-info {
428 margin-top: 5px;
429 color: @grey4;
428 color: @grey4;
430 }
429 }
431
430
@@ -434,7 +433,6 b''
434 text-align: right;
433 text-align: right;
435 color: @grey4;
434 color: @grey4;
436 padding: 10px;
435 padding: 10px;
437 margin-top: 15px;
438 }
436 }
439
437
440 .file-container {
438 .file-container {
@@ -552,6 +552,12 b''
552 "src": "fontelico"
552 "src": "fontelico"
553 },
553 },
554 {
554 {
555 "uid": "513ac180ff85bd275f2b736720cbbf5e",
556 "css": "home",
557 "code": 59427,
558 "src": "entypo"
559 },
560 {
555 "uid": "c43db6645e7515889fc2193294f50767",
561 "uid": "c43db6645e7515889fc2193294f50767",
556 "css": "plus",
562 "css": "plus",
557 "code": 59411,
563 "code": 59411,
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -76,6 +76,8 b''
76
76
77 <glyph glyph-name="upload" unicode="&#xe822;" d="M714 29q0 14-10 25t-25 10-25-10-11-25 11-25 25-11 25 11 10 25z m143 0q0 14-10 25t-26 10-25-10-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
77 <glyph glyph-name="upload" unicode="&#xe822;" d="M714 29q0 14-10 25t-25 10-25-10-11-25 11-25 25-11 25 11 10 25z m143 0q0 14-10 25t-26 10-25-10-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-38t-38-16h-821q-23 0-38 16t-16 38v179q0 22 16 38t38 15h238q12-31 39-51t62-20h143q34 0 61 20t40 51h238q22 0 38-15t16-38z m-182 361q-9-22-33-22h-143v-250q0-15-10-25t-25-11h-143q-15 0-25 11t-11 25v250h-143q-23 0-33 22-9 22 8 39l250 250q10 10 25 10t25-10l250-250q18-17 8-39z" horiz-adv-x="928.6" />
78
78
79 <glyph glyph-name="home" unicode="&#xe823;" d="M888 336q16-16 11-27t-27-11l-84 0 0-310q0-14-1-21t-8-13-23-6l-204 0 0 310-204 0 0-310-194 0q-28 0-35 10t-7 30l0 310-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" />
80
79 <glyph glyph-name="git" unicode="&#xe82a;" d="M929 844h-858c-36 0-65-30-65-65v-857c0-36 30-65 65-65h857c36 0 65 30 65 65v857c1 35-29 65-64 65z m-729-549c4-11 9-20 14-27 6-8 14-14 22-18 9-4 19-6 29-6 9 0 16 1 24 2 7 2 14 4 20 7l6 51h-27c-4 0-8 1-10 4-2 1-3 5-3 7l5 39h105l-16-131c-8-7-16-12-25-15-9-4-18-8-28-10-10-3-18-5-30-7-10-1-21-2-33-2-20 0-38 4-54 11-16 8-30 18-41 30-12 13-20 28-27 45-6 18-10 36-10 56 0 18 3 34 7 50 3 17 10 30 17 44 8 14 16 25 26 36 10 12 22 20 34 28 13 7 26 14 41 17 15 4 30 7 47 7 13 0 25-2 36-4 11-3 21-6 29-10 8-4 16-9 22-14 6-5 13-11 18-16l-20-31c-4-5-9-8-14-9-5-1-10 0-16 4-5 3-10 6-14 8-5 3-9 5-14 7-5 1-10 2-15 3-5 2-11 2-17 2-14 0-27-3-38-9-11-6-21-14-29-25-8-10-15-24-18-38-5-15-7-31-7-48-1-14 2-27 4-38z m336-102h-71l39 315h71l-39-315z m343 258h-80l-33-258h-70l32 258h-80l7 57h231l-7-57z" horiz-adv-x="1000" />
81 <glyph glyph-name="git" unicode="&#xe82a;" d="M929 844h-858c-36 0-65-30-65-65v-857c0-36 30-65 65-65h857c36 0 65 30 65 65v857c1 35-29 65-64 65z m-729-549c4-11 9-20 14-27 6-8 14-14 22-18 9-4 19-6 29-6 9 0 16 1 24 2 7 2 14 4 20 7l6 51h-27c-4 0-8 1-10 4-2 1-3 5-3 7l5 39h105l-16-131c-8-7-16-12-25-15-9-4-18-8-28-10-10-3-18-5-30-7-10-1-21-2-33-2-20 0-38 4-54 11-16 8-30 18-41 30-12 13-20 28-27 45-6 18-10 36-10 56 0 18 3 34 7 50 3 17 10 30 17 44 8 14 16 25 26 36 10 12 22 20 34 28 13 7 26 14 41 17 15 4 30 7 47 7 13 0 25-2 36-4 11-3 21-6 29-10 8-4 16-9 22-14 6-5 13-11 18-16l-20-31c-4-5-9-8-14-9-5-1-10 0-16 4-5 3-10 6-14 8-5 3-9 5-14 7-5 1-10 2-15 3-5 2-11 2-17 2-14 0-27-3-38-9-11-6-21-14-29-25-8-10-15-24-18-38-5-15-7-31-7-48-1-14 2-27 4-38z m336-102h-71l39 315h71l-39-315z m343 258h-80l-33-258h-70l32 258h-80l7 57h231l-7-57z" horiz-adv-x="1000" />
80
82
81 <glyph glyph-name="hg" unicode="&#xe82d;" d="M927 841h-853c-36 0-65-29-65-65v-853c0-36 29-65 65-65h853c36 0 65 29 65 65v853c0 36-29 65-65 65z m-483-648h-70l16 133h-113l-17-133h-70l39 313h70l-16-132h113l16 132h71l-39-313z m177 101c3-11 8-20 14-27 7-8 14-14 23-18 8-4 18-6 28-6 9 0 16 1 23 3 7 1 14 3 20 6l6 51h-27c-4 0-7 1-9 3-3 3-3 6-3 9l5 39h104l-16-131c-8-6-16-11-25-15-9-5-18-8-27-11-9-2-19-4-30-6-10-1-21-2-33-2-19 0-37 4-53 11-16 7-30 17-41 29-11 13-20 28-26 45-7 17-10 35-10 55 0 17 2 34 6 50 4 15 10 30 17 43 7 14 16 26 26 36 10 11 22 20 34 28 13 7 27 13 41 17 14 4 30 7 46 7 13 0 25-2 36-4 11-3 20-6 29-10 8-4 16-9 23-14 7-5 13-11 18-17l-23-28c-4-5-8-8-13-9-5-1-11 0-16 3-5 4-10 7-14 9-5 3-9 5-14 6-4 2-9 3-14 4-5 1-11 1-17 1-14 0-27-3-38-8-11-6-21-14-29-25-8-10-15-23-19-38-5-15-7-31-7-49 0-13 2-26 5-37z" horiz-adv-x="1000" />
83 <glyph glyph-name="hg" unicode="&#xe82d;" d="M927 841h-853c-36 0-65-29-65-65v-853c0-36 29-65 65-65h853c36 0 65 29 65 65v853c0 36-29 65-65 65z m-483-648h-70l16 133h-113l-17-133h-70l39 313h70l-16-132h113l16 132h71l-39-313z m177 101c3-11 8-20 14-27 7-8 14-14 23-18 8-4 18-6 28-6 9 0 16 1 23 3 7 1 14 3 20 6l6 51h-27c-4 0-7 1-9 3-3 3-3 6-3 9l5 39h104l-16-131c-8-6-16-11-25-15-9-5-18-8-27-11-9-2-19-4-30-6-10-1-21-2-33-2-19 0-37 4-53 11-16 7-30 17-41 29-11 13-20 28-26 45-7 17-10 35-10 55 0 17 2 34 6 50 4 15 10 30 17 43 7 14 16 26 26 36 10 11 22 20 34 28 13 7 27 13 41 17 14 4 30 7 46 7 13 0 25-2 36-4 11-3 20-6 29-10 8-4 16-9 23-14 7-5 13-11 18-17l-23-28c-4-5-8-8-13-9-5-1-11 0-16 3-5 4-10 7-14 9-5 3-9 5-14 6-4 2-9 3-14 4-5 1-11 1-17 1-14 0-27-3-38-8-11-6-21-14-29-25-8-10-15-23-19-38-5-15-7-31-7-49 0-13 2-26 5-37z" horiz-adv-x="1000" />
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -73,10 +73,3 b' var select2RefSwitcher = function(target'
73 {'repo_name': templateContext.repo_name});
73 {'repo_name': templateContext.repo_name});
74 select2RefBaseSwitcher(targetElement, loadUrl, initialData);
74 select2RefBaseSwitcher(targetElement, loadUrl, initialData);
75 };
75 };
76
77 var select2FileHistorySwitcher = function(targetElement, initialData, state) {
78 var loadUrl = pyroutes.url('repo_file_history',
79 {'repo_name': templateContext.repo_name, 'commit_id': state.rev,
80 'f_path': state.f_path});
81 select2RefBaseSwitcher(targetElement, loadUrl, initialData);
82 };
@@ -3,7 +3,7 b''
3
3
4 <table class="table rctable file_history">
4 <table class="table rctable file_history">
5 %for cnt,cs in enumerate(c.pagination):
5 %for cnt,cs in enumerate(c.pagination):
6 <tr id="chg_${cnt+1}" class="${'tablerow%s' % (cnt%2)}">
6 <tr id="chg_${cnt+1}" class="${('tablerow%s' % (cnt%2))}">
7 <td class="td-user">
7 <td class="td-user">
8 ${base.gravatar_with_user(cs.author, 16)}
8 ${base.gravatar_with_user(cs.author, 16)}
9 </td>
9 </td>
@@ -33,7 +33,19 b''
33 ${_('Show File')}
33 ${_('Show File')}
34 </a>
34 </a>
35 </td>
35 </td>
36 <td class="td-actions">
37 <a href="${h.route_path('repo_compare',repo_name=c.repo_name, source_ref_type="rev", source_ref=cs.raw_id,target_ref_type="rev", target_ref=c.commit_id,_query=dict(merge='1',f_path=c.changelog_for_path))}">
38 ${_('Diff File')}
39 </a>
40 </td>
36 </tr>
41 </tr>
37 %endfor
42 %endfor
43 <tr>
44 <td colspan="6">
45 <a id="file_history_overview_full" href="${h.route_path('repo_changelog_file',repo_name=c.repo_name, commit_id=c.commit_id, f_path=c.f_path)}">
46 ${_('Show Full History')}
47 </a>
48 </td>
49 </tr>
38 </table>
50 </table>
39 </div>
51 </div>
@@ -10,6 +10,7 b''
10 <span class="user commit-author">${h.link_to_user(user)}</span>
10 <span class="user commit-author">${h.link_to_user(user)}</span>
11 % if c.file_author:
11 % if c.file_author:
12 <span class="commit-date">- ${h.age_component(c.file_last_commit.date)}</span>
12 <span class="commit-date">- ${h.age_component(c.file_last_commit.date)}</span>
13 <a href="#ShowAuthors" id="show_authors" class="action_link"> - ${_('Load All Authors')}</a>
13 % elif c.file_last_commit.author_email==email:
14 % elif c.file_last_commit.author_email==email:
14 <span> (${_('last author')})</span>
15 <span> (${_('last author')})</span>
15 % endif
16 % endif
@@ -27,13 +28,7 b''
27 % endif
28 % endif
28 </td>
29 </td>
29 </tr>
30 </tr>
30 <tr>
31
31 <td colspan="2">
32 % if c.file_author:
33 <a href="#ShowAuthors" id="show_authors" class="action_link">${_('Show Authors')}</a>
34 % endif
35 </td>
36 </tr>
37 % endfor
32 % endfor
38 </table>
33 </table>
39 % endif
34 % endif
@@ -118,82 +118,134 b''
118 timeagoActivate();
118 timeagoActivate();
119 });
119 });
120 metadataRequest.fail(function (data, textStatus, errorThrown) {
120 metadataRequest.fail(function (data, textStatus, errorThrown) {
121 console.log(data);
122 if (data.status != 0) {
121 if (data.status != 0) {
123 alert("Error while fetching metadata.\nError code {0} ({1}).Please consider reloading the page".format(data.status,data.statusText));
122 alert("Error while fetching metadata.\nError code {0} ({1}).Please consider reloading the page".format(data.status,data.statusText));
124 }
123 }
125 });
124 });
126 };
125 };
127
126
128 var callbacks = function() {
127 var initFileJS = function () {
129 timeagoActivate();
130
131 if ($('#trimmed_message_box').height() < 50) {
132 $('#message_expand').hide();
133 }
134
135 $('#message_expand').on('click', function(e) {
136 $('#trimmed_message_box').css('max-height', 'none');
137 $(this).hide();
138 });
139
140 var state = getState('callbacks');
128 var state = getState('callbacks');
141
129
142 // VIEW FOR FILE SOURCE
143 if (fileSourcePage) {
144 // variants for with source code, not tree view
145
146 // select code link event
130 // select code link event
147 $("#hlcode").mouseup(getSelectionLink);
131 $("#hlcode").mouseup(getSelectionLink);
148
132
149 // file history select2 used for history, and switch to
133 // file history select2 used for history of file, and switch to
150 var initialCommitData = {
134 var initialCommitData = {
135 at_ref: atRef,
151 id: null,
136 id: null,
152 text: '${_("Pick Commit")}',
137 text: '${c.commit.raw_id}',
153 type: 'sha',
138 type: 'sha',
154 raw_id: null,
139 raw_id: '${c.commit.raw_id}',
155 files_url: null
140 idx: ${c.commit.idx},
141 files_url: null,
156 };
142 };
157
143
158 select2FileHistorySwitcher('#diff1', initialCommitData, state);
144 // check if we have ref info.
145 var selectedRef = fileTreeRefs[atRef];
146 if (selectedRef !== undefined) {
147 $.extend(initialCommitData, selectedRef)
148 }
149
150 var loadUrl = pyroutes.url('repo_file_history', {'repo_name': templateContext.repo_name, 'commit_id': state.rev,'f_path': state.f_path});
151 var cacheKey = '__SINGLE_FILE_REFS__';
152 var cachedDataSource = {};
159
153
160 // show at, diff to actions handlers
154 var loadRefsData = function (query) {
161 $('#diff1').on('change', function(e) {
155 $.ajax({
162 $('#diff_to_commit').removeClass('disabled').removeAttr("disabled");
156 url: loadUrl,
163 $('#diff_to_commit').val(_gettext('Diff to Commit ') + e.val.truncateAfter(8, '...'));
157 data: {},
158 dataType: 'json',
159 type: 'GET',
160 success: function (data) {
161 cachedDataSource[cacheKey] = data;
162 query.callback({results: data.results});
163 }
164 });
165 };
164
166
165 $('#show_at_commit').removeClass('disabled').removeAttr("disabled");
167 var feedRefsData = function (query, cachedData) {
166 $('#show_at_commit').val(_gettext('Show at Commit ') + e.val.truncateAfter(8, '...'));
168 var data = {results: []};
169 //filter results
170 $.each(cachedData.results, function () {
171 var section = this.text;
172 var children = [];
173 $.each(this.children, function () {
174 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
175 children.push(this)
176 }
177 });
178 data.results.push({
179 'text': section,
180 'children': children
181 })
167 });
182 });
168
183
169 $('#diff_to_commit').on('click', function(e) {
184 query.callback(data);
170 var diff1 = $('#diff1').val();
185 };
171 var diff2 = $('#diff2').val();
186
187 var select2FileHistorySwitcher = function (targetElement, loadUrl, initialData) {
188 var formatResult = function (result, container, query) {
189 return formatSelect2SelectionRefs(result);
190 };
191
192 var formatSelection = function (data, container) {
193 var commit_ref = data;
172
194
173 var url_data = {
195 var tmpl = '';
174 repo_name: templateContext.repo_name,
196 if (commit_ref.type === 'sha') {
175 source_ref: diff1,
197 tmpl = (commit_ref.raw_id || "").substr(0,8);
176 source_ref_type: 'rev',
198 } else if (commit_ref.type === 'branch') {
177 target_ref: diff2,
199 tmpl = tmpl.concat('<i class="icon-branch"></i> ');
178 target_ref_type: 'rev',
200 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
179 merge: 1,
201 } else if (commit_ref.type === 'tag') {
180 f_path: state.f_path
202 tmpl = tmpl.concat('<i class="icon-tag"></i> ');
203 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
204 } else if (commit_ref.type === 'book') {
205 tmpl = tmpl.concat('<i class="icon-bookmark"></i> ');
206 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
207 }
208 var idx = commit_ref.idx || 0;
209 tmpl = tmpl.concat('<span class="select-index-number">r{0}</span>'.format(idx));
210 return tmpl
181 };
211 };
182 window.location = pyroutes.url('repo_compare', url_data);
212
213 $(targetElement).select2({
214 dropdownAutoWidth: true,
215 width: "resolve",
216 containerCssClass: "drop-menu",
217 dropdownCssClass: "drop-menu-dropdown",
218 query: function(query) {
219 var cachedData = cachedDataSource[cacheKey];
220 if (cachedData) {
221 feedRefsData(query, cachedData)
222 } else {
223 loadRefsData(query)
224 }
225 },
226 initSelection: function(element, callback) {
227 callback(initialData);
228 },
229 formatResult: formatResult,
230 formatSelection: formatSelection
183 });
231 });
184
232
185 $('#show_at_commit').on('click', function(e) {
233 };
186 var diff1 = $('#diff1').val();
234
235 select2FileHistorySwitcher('#file_refs_filter', loadUrl, initialCommitData);
187
236
188 var annotate = $('#annotate').val();
237 $('#file_refs_filter').on('change', function(e) {
189 if (annotate === "True") {
238 var data = $('#file_refs_filter').select2('data');
239 var commit_id = data.id;
240
241 if ("${c.annotate}" === "True") {
190 var url = pyroutes.url('repo_files:annotated',
242 var url = pyroutes.url('repo_files:annotated',
191 {'repo_name': templateContext.repo_name,
243 {'repo_name': templateContext.repo_name,
192 'commit_id': diff1, 'f_path': state.f_path});
244 'commit_id': commit_id, 'f_path': state.f_path});
193 } else {
245 } else {
194 var url = pyroutes.url('repo_files',
246 var url = pyroutes.url('repo_files',
195 {'repo_name': templateContext.repo_name,
247 {'repo_name': templateContext.repo_name,
196 'commit_id': diff1, 'f_path': state.f_path});
248 'commit_id': commit_id, 'f_path': state.f_path});
197 }
249 }
198 window.location = url;
250 window.location = url;
199
251
@@ -236,12 +288,14 b''
236 container: '#file_history_container',
288 container: '#file_history_container',
237 push: false,
289 push: false,
238 timeout: 5000
290 timeout: 5000
239 })
291 });
240 });
292 });
241
293
242 }
294
243 // VIEW FOR FILE TREE BROWSER
295 };
244 else {
296
297 var initTreeJS = function () {
298 var state = getState('callbacks');
245 getFilesMetadata();
299 getFilesMetadata();
246
300
247 // fuzzy file filter
301 // fuzzy file filter
@@ -330,7 +384,7 b''
330
384
331 var tmpl = '';
385 var tmpl = '';
332 if (commit_ref.type === 'sha') {
386 if (commit_ref.type === 'sha') {
333 tmpl = commit_ref.raw_id.substr(0,8);
387 tmpl = (commit_ref.raw_id || "").substr(0,8);
334 } else if (commit_ref.type === 'branch') {
388 } else if (commit_ref.type === 'branch') {
335 tmpl = tmpl.concat('<i class="icon-branch"></i> ');
389 tmpl = tmpl.concat('<i class="icon-branch"></i> ');
336 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
390 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
@@ -342,7 +396,8 b''
342 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
396 tmpl = tmpl.concat(escapeHtml(commit_ref.text));
343 }
397 }
344
398
345 tmpl = tmpl.concat('<span class="select-index-number">r{0}</span>'.format(commit_ref.idx));
399 var idx = commit_ref.idx || 0;
400 tmpl = tmpl.concat('<span class="select-index-number">r{0}</span>'.format(idx));
346 return tmpl
401 return tmpl
347 };
402 };
348
403
@@ -376,11 +431,26 b''
376 window.location = data.files_url
431 window.location = data.files_url
377 });
432 });
378
433
379 }
380 };
434 };
381
435
382 $(document).ready(function() {
436 $(document).ready(function() {
383 callbacks();
437 timeagoActivate();
438
439 if ($('#trimmed_message_box').height() < 50) {
440 $('#message_expand').hide();
441 }
442
443 $('#message_expand').on('click', function(e) {
444 $('#trimmed_message_box').css('max-height', 'none');
445 $(this).hide();
446 });
447
448 if (fileSourcePage) {
449 initFileJS()
450 } else {
451 initTreeJS()
452 }
453
384 var search_GET = "${request.GET.get('search','')}";
454 var search_GET = "${request.GET.get('search','')}";
385 if (search_GET === "1") {
455 if (search_GET === "1") {
386 NodeFilter.initFilter();
456 NodeFilter.initFilter();
@@ -17,18 +17,28 b''
17 </div>
17 </div>
18
18
19 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
19 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
20 <div title="${_('Add New File')}" class="btn btn-primary new-file">
20 <div>
21 <a href="${h.route_path('repo_files_add_file',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path, _anchor='edit')}">
21 <a class="btn btn-primary new-file" href="${h.route_path('repo_files_add_file',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path, _anchor='edit')}">
22 ${_('Add File')}</a>
22 ${_('Upload File')}
23 </a>
24 <a class="btn btn-primary new-file" href="${h.route_path('repo_files_add_file',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path, _anchor='edit')}">
25 ${_('Add File')}
26 </a>
23 </div>
27 </div>
24 % endif
28 % endif
25
29
26 % if c.enable_downloads:
30 % if c.enable_downloads:
27 <% at_path = '{}'.format(request.GET.get('at') or c.commit.raw_id[:6]) %>
31 <% at_path = '{}'.format(request.GET.get('at') or c.commit.raw_id[:6]) %>
28 <div class="btn btn-default new-file">
32 <div class="btn btn-default new-file">
33 % if c.f_path == '/':
29 <a href="${h.route_path('repo_archivefile',repo_name=c.repo_name, fname='{}.zip'.format(c.commit.raw_id))}">
34 <a href="${h.route_path('repo_archivefile',repo_name=c.repo_name, fname='{}.zip'.format(c.commit.raw_id))}">
30 ${_('Download ZIP @ ')} <code>${at_path}</code>
35 ${_('Download full tree ZIP')}
31 </a>
36 </a>
37 % else:
38 <a href="${h.route_path('repo_archivefile',repo_name=c.repo_name, fname='{}.zip'.format(c.commit.raw_id))}">
39 ${_('Download this tree ZIP')}
40 </a>
41 % endif
32 </div>
42 </div>
33 % endif
43 % endif
34
44
@@ -45,6 +55,7 b''
45 </div>
55 </div>
46
56
47 </div>
57 </div>
58
48 ## file tree is computed from caches, and filled in
59 ## file tree is computed from caches, and filled in
49 <div id="file-tree">
60 <div id="file-tree">
50 ${c.file_tree |n}
61 ${c.file_tree |n}
@@ -17,19 +17,13 b''
17 </thead>
17 </thead>
18
18
19 <tbody id="tbody">
19 <tbody id="tbody">
20 %if c.file.parent:
20 <tr>
21 <tr class="parity0">
21 <td colspan="5">
22 <td class="td-componentname">
22
23 <a href="${h.route_path('repo_files',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.file.parent.path, _query=query)}">
23 ${h.files_breadcrumbs(c.repo_name,c.commit.raw_id,c.file.path, request.GET.get('at'), limit_items=True)}
24 <i class="icon-directory"></i>..
24
25 </a>
26 </td>
25 </td>
27 <td></td>
28 <td></td>
29 <td></td>
30 <td></td>
31 </tr>
26 </tr>
32 %endif
33 %for cnt,node in enumerate(c.file):
27 %for cnt,node in enumerate(c.file):
34 <tr class="parity${cnt%2}">
28 <tr class="parity${cnt%2}">
35 <td class="td-componentname">
29 <td class="td-componentname">
@@ -13,14 +13,7 b''
13
13
14 <div class="summary-detail">
14 <div class="summary-detail">
15 <div class="summary-detail-header">
15 <div class="summary-detail-header">
16 <div class="breadcrumbs files_location">
16
17 <h4>
18 ${h.files_breadcrumbs(c.repo_name,c.commit.raw_id,c.file.path, request.GET.get('at'))}
19 %if c.annotate:
20 - ${_('annotation')}
21 %endif
22 </h4>
23 </div>
24 </div><!--end summary-detail-header-->
17 </div><!--end summary-detail-header-->
25
18
26 % if c.file.is_submodule():
19 % if c.file.is_submodule():
@@ -1,16 +1,61 b''
1 <%namespace name="sourceblock" file="/codeblocks/source.mako"/>
1 <%namespace name="sourceblock" file="/codeblocks/source.mako"/>
2
2
3 <div id="codeblock" class="codeblock">
3 <div id="codeblock" class="browserblock">
4 <div class="codeblock-header">
4 <div class="browser-header">
5 <div class="browser-nav">
6 <div class="pull-left">
7 ## loads the history for a file
8 ${h.hidden('file_refs_filter')}
9 </div>
10
11 <div class="pull-right">
12
13 ## Download
14 % if c.lf_node:
15 <a class="btn btn-default" href="${h.route_path('repo_file_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path, _query=dict(lf=1))}">
16 ${_('Download largefile')}
17 </a>
18 % else:
19 <a class="btn btn-default" href="${h.route_path('repo_file_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path)}">
20 ${_('Download file')}
21 </a>
22 % endif
23
24 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
25 ## on branch head, can edit files
26 %if c.on_branch_head and c.branch_or_raw_id and not c.file.is_binary:
27 ## binary files are delete only
28 % if c.file.is_binary:
29 ${h.link_to(_('Edit'), '#Edit', class_="btn btn-default disabled tooltip", title=_('Editing binary files not allowed'))}
30 ${h.link_to(_('Delete'), h.route_path('repo_files_remove_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit'),class_="btn btn-danger")}
31 % else:
32 <a class="btn btn-default" href="${h.route_path('repo_files_edit_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit')}">
33 ${_('Edit on branch: ')}<code>${c.branch_name}</code>
34 </a>
35
36 <a class="btn btn-danger" href="${h.route_path('repo_files_remove_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit')}">
37 ${_('Delete')}
38 </a>
39 % endif
40 ## not on head, forbid all
41 % else:
42 ${h.link_to(_('Edit'), '#Edit', class_="btn btn-default disabled tooltip", title=_('Editing files allowed only when on branch head commit'))}
43 ${h.link_to(_('Delete'), '#Delete', class_="btn btn-default btn-danger disabled tooltip", title=_('Deleting files allowed only when on branch head commit'))}
44 % endif
45 %endif
46
47 </div>
48 </div>
49 <div id="file_history_container"></div>
50
51 </div>
52 </div>
53
54 <div class="codeblock codeblock-header">
55 <div>
56 ${h.files_breadcrumbs(c.repo_name,c.commit.raw_id,c.file.path, request.GET.get('at'))}
57 </div>
5 <div class="stats">
58 <div class="stats">
6 <span class="stats-filename">
7 <strong>
8 <i class="icon-file-text"></i>
9 ${c.file.unicode_path_safe}
10 </strong>
11 </span>
12 <span class="item last"><i class="tooltip icon-clipboard clipboard-action" data-clipboard-text="${c.f_path}" title="${_('Copy the full path')}"></i></span>
13 <br/>
14
59
15 % if c.lf_node:
60 % if c.lf_node:
16 <span title="${_('This file is a pointer to large binary file')}"> | ${_('LargeFile')} ${h.format_byte_size_binary(c.lf_node.size)} </span>
61 <span title="${_('This file is a pointer to large binary file')}"> | ${_('LargeFile')} ${h.format_byte_size_binary(c.lf_node.size)} </span>
@@ -22,50 +67,22 b''
22 <span> | ${c.file.mimetype} </span>
67 <span> | ${c.file.mimetype} </span>
23 <span> | ${h.get_lexer_for_filenode(c.file).__class__.__name__}</span>
68 <span> | ${h.get_lexer_for_filenode(c.file).__class__.__name__}</span>
24 </div>
69 </div>
70
25 </div>
71 </div>
26 <div class="buttons">
72 <div class="pull-right">
27 <a id="file_history_overview" href="#">
73 <a id="file_history_overview" href="#loadHistory">
28 ${_('History')}
74 ${_('History')}
29 </a>
75 </a>
30 <a id="file_history_overview_full" style="display: none" href="${h.route_path('repo_changelog_file',repo_name=c.repo_name, commit_id=c.commit.raw_id, f_path=c.f_path)}">
76 |
31 ${_('Show Full History')}
32 </a> |
33 %if c.annotate:
77 %if c.annotate:
34 ${h.link_to(_('Source'), h.route_path('repo_files', repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))}
78 ${h.link_to(_('Source'), h.route_path('repo_files', repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))}
35 %else:
79 %else:
36 ${h.link_to(_('Annotation'), h.route_path('repo_files:annotated',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))}
80 ${h.link_to(_('Annotation'), h.route_path('repo_files:annotated',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))}
37 %endif
81 %endif
38 | ${h.link_to(_('Raw'), h.route_path('repo_file_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))}
82 | ${h.link_to(_('Raw'), h.route_path('repo_file_raw',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path))}
39 |
40 % if c.lf_node:
41 <a href="${h.route_path('repo_file_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path, _query=dict(lf=1))}">
42 ${_('Download largefile')}
43 </a>
44 % else:
45 <a href="${h.route_path('repo_file_download',repo_name=c.repo_name,commit_id=c.commit.raw_id,f_path=c.f_path)}">
46 ${_('Download')}
47 </a>
48 % endif
49
83
50 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
51 |
52 %if c.on_branch_head and c.branch_or_raw_id and not c.file.is_binary:
53 <a href="${h.route_path('repo_files_edit_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit')}">
54 ${_('Edit on Branch:{}').format(c.branch_name)}
55 </a>
56 | <a class="btn-danger btn-link" href="${h.route_path('repo_files_remove_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit')}">${_('Delete')}
57 </a>
58 %elif c.on_branch_head and c.branch_or_raw_id and c.file.is_binary:
59 ${h.link_to(_('Edit'), '#', class_="btn btn-link disabled tooltip", title=_('Editing binary files not allowed'))}
60 | ${h.link_to(_('Delete'), h.route_path('repo_files_remove_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit'),class_="btn-danger btn-link")}
61 %else:
62 ${h.link_to(_('Edit'), '#', class_="btn btn-link disabled tooltip", title=_('Editing files allowed only when on branch head commit'))}
63 | ${h.link_to(_('Delete'), '#', class_="btn btn-danger btn-link disabled tooltip", title=_('Deleting files allowed only when on branch head commit'))}
64 %endif
65 %endif
66 </div>
84 </div>
67 </div>
85
68 <div id="file_history_container"></div>
69 <div class="code-body">
86 <div class="code-body">
70 %if c.file.is_binary:
87 %if c.file.is_binary:
71 <% rendered_binary = h.render_binary(c.repo_name, c.file)%>
88 <% rendered_binary = h.render_binary(c.repo_name, c.file)%>
@@ -36,29 +36,6 b''
36 </div>
36 </div>
37 </div>
37 </div>
38 </div>
38 </div>
39
40
41 <div class="fieldset collapsable-content" data-toggle="summary-details">
42 <div class="left-label-summary-files">
43 <p class="spacing">${_('Show/Diff file')}</p>
44 <div class="right-label-summary">
45 ${h.hidden('diff1')}
46 ${h.hidden('diff2',c.commit.raw_id)}
47 ${h.hidden('annotate', c.annotate)}
48 </div>
49 </div>
50 </div>
51
52
53 <div class="fieldset collapsable-content" data-toggle="summary-details">
54 <div class="left-label-summary-files">
55 <p>${_('Action')}</p>
56 <div class="right-label-summary">
57 ${h.submit('diff_to_commit',_('Diff to Commit'),class_="btn disabled",disabled="true")}
58 ${h.submit('show_at_commit',_('Show at Commit'),class_="btn disabled",disabled="true")}
59 </div>
60 </div>
61 </div>
62 </div>
39 </div>
63
40
64 <div class="right-content">
41 <div class="right-content">
General Comments 0
You need to be logged in to leave comments. Login now