Show More
@@ -334,6 +334,13 b' class RepoGroupAppView(BaseAppView):' | |||||
334 | self.db_repo_group = request.db_repo_group |
|
334 | self.db_repo_group = request.db_repo_group | |
335 | self.db_repo_group_name = self.db_repo_group.group_name |
|
335 | self.db_repo_group_name = self.db_repo_group.group_name | |
336 |
|
336 | |||
|
337 | def _get_local_tmpl_context(self, include_app_defaults=True): | |||
|
338 | _ = self.request.translate | |||
|
339 | c = super(RepoGroupAppView, self)._get_local_tmpl_context( | |||
|
340 | include_app_defaults=include_app_defaults) | |||
|
341 | c.repo_group = self.db_repo_group | |||
|
342 | return c | |||
|
343 | ||||
337 | def _revoke_perms_on_yourself(self, form_result): |
|
344 | def _revoke_perms_on_yourself(self, form_result): | |
338 | _updates = filter(lambda u: self._rhodecode_user.user_id == int(u[0]), |
|
345 | _updates = filter(lambda u: self._rhodecode_user.user_id == int(u[0]), | |
339 | form_result['perm_updates']) |
|
346 | form_result['perm_updates']) |
@@ -334,6 +334,7 b' class HomeView(BaseAppView):' | |||||
334 | def _get_default_search_queries(self, search_context, searcher, query): |
|
334 | def _get_default_search_queries(self, search_context, searcher, query): | |
335 | if not searcher: |
|
335 | if not searcher: | |
336 | return [] |
|
336 | return [] | |
|
337 | ||||
337 | is_es_6 = searcher.is_es_6 |
|
338 | is_es_6 = searcher.is_es_6 | |
338 |
|
339 | |||
339 | queries = [] |
|
340 | queries = [] | |
@@ -424,12 +425,20 b' class HomeView(BaseAppView):' | |||||
424 | { |
|
425 | { | |
425 | 'id': -1, |
|
426 | 'id': -1, | |
426 | 'value': query, |
|
427 | 'value': query, | |
427 |
'value_display': u' |
|
428 | 'value_display': u'Commit search for: `{}`'.format(query), | |
428 | 'type': 'search', |
|
429 | 'type': 'search', | |
429 | 'url': h.route_path('search', |
|
430 | 'url': h.route_path('search', | |
430 | _query={'q': query, 'type': 'content'}) |
|
431 | _query={'q': query, 'type': 'content'}) | |
431 | } |
|
432 | }) | |
432 |
|
|
433 | queries.append( | |
|
434 | { | |||
|
435 | 'id': -1, | |||
|
436 | 'value': query, | |||
|
437 | 'value_display': u'File search for: `{}`'.format(query), | |||
|
438 | 'type': 'search', | |||
|
439 | 'url': h.route_path('search', | |||
|
440 | _query={'q': query, 'type': 'commit'}) | |||
|
441 | }) | |||
433 |
|
442 | |||
434 | return queries |
|
443 | return queries | |
435 |
|
444 |
@@ -41,7 +41,7 b' def perform_search(request, tmpl_context' | |||||
41 | execution_time = '' |
|
41 | execution_time = '' | |
42 |
|
42 | |||
43 | schema = search_schema.SearchParamsSchema() |
|
43 | schema = search_schema.SearchParamsSchema() | |
44 |
|
44 | search_tags = [] | ||
45 | search_params = {} |
|
45 | search_params = {} | |
46 | errors = [] |
|
46 | errors = [] | |
47 | try: |
|
47 | try: | |
@@ -85,6 +85,8 b' def perform_search(request, tmpl_context' | |||||
85 | finally: |
|
85 | finally: | |
86 | searcher.cleanup() |
|
86 | searcher.cleanup() | |
87 |
|
87 | |||
|
88 | search_tags = searcher.extract_search_tags(search_query) | |||
|
89 | ||||
88 | if not search_result['error']: |
|
90 | if not search_result['error']: | |
89 | execution_time = '%s results (%.3f seconds)' % ( |
|
91 | execution_time = '%s results (%.3f seconds)' % ( | |
90 | search_result['count'], |
|
92 | search_result['count'], | |
@@ -105,6 +107,7 b' def perform_search(request, tmpl_context' | |||||
105 | c.cur_query = search_query |
|
107 | c.cur_query = search_query | |
106 | c.search_type = search_type |
|
108 | c.search_type = search_type | |
107 | c.searcher = searcher |
|
109 | c.searcher = searcher | |
|
110 | c.search_tags = search_tags | |||
108 |
|
111 | |||
109 |
|
112 | |||
110 | class SearchView(BaseAppView): |
|
113 | class SearchView(BaseAppView): |
@@ -1495,6 +1495,28 b' def breadcrumb_repo_link(repo):' | |||||
1495 | return literal(' » '.join(path)) |
|
1495 | return literal(' » '.join(path)) | |
1496 |
|
1496 | |||
1497 |
|
1497 | |||
|
1498 | def breadcrumb_repo_group_link(repo_group): | |||
|
1499 | """ | |||
|
1500 | Makes a breadcrumbs path link to repo | |||
|
1501 | ||||
|
1502 | ex:: | |||
|
1503 | group >> subgroup | |||
|
1504 | ||||
|
1505 | :param repo_group: a Repository Group instance | |||
|
1506 | """ | |||
|
1507 | ||||
|
1508 | path = [ | |||
|
1509 | link_to(group.name, | |||
|
1510 | route_path('repo_group_home', repo_group_name=group.group_name)) | |||
|
1511 | for group in repo_group.parents | |||
|
1512 | ] + [ | |||
|
1513 | link_to(repo_group.name, | |||
|
1514 | route_path('repo_group_home', repo_group_name=repo_group.group_name)) | |||
|
1515 | ] | |||
|
1516 | ||||
|
1517 | return literal(' » '.join(path)) | |||
|
1518 | ||||
|
1519 | ||||
1498 | def format_byte_size_binary(file_size): |
|
1520 | def format_byte_size_binary(file_size): | |
1499 | """ |
|
1521 | """ | |
1500 | Formats file/folder sizes to standard. |
|
1522 | Formats file/folder sizes to standard. |
@@ -76,6 +76,10 b' class BaseSearcher(object):' | |||||
76 | def get_handlers(self): |
|
76 | def get_handlers(self): | |
77 | return {} |
|
77 | return {} | |
78 |
|
78 | |||
|
79 | @staticmethod | |||
|
80 | def extract_search_tags(query): | |||
|
81 | return [] | |||
|
82 | ||||
79 |
|
83 | |||
80 | def search_config(config, prefix='search.'): |
|
84 | def search_config(config, prefix='search.'): | |
81 | _config = {} |
|
85 | _config = {} |
@@ -195,63 +195,3 b' def get_matching_line_offsets(lines, ter' | |||||
195 | matching_lines[line_index] = match_offsets |
|
195 | matching_lines[line_index] = match_offsets | |
196 |
|
196 | |||
197 | return line_index, matching_lines |
|
197 | return line_index, matching_lines | |
198 |
|
||||
199 |
|
||||
200 | def lucene_query_parser(): |
|
|||
201 | # from pyparsing lucene_grammar |
|
|||
202 | from pyparsing import ( |
|
|||
203 | Literal, CaselessKeyword, Forward, Regex, QuotedString, Suppress, |
|
|||
204 | Optional, Group, infixNotation, opAssoc, ParserElement, pyparsing_common) |
|
|||
205 |
|
||||
206 | ParserElement.enablePackrat() |
|
|||
207 |
|
||||
208 | COLON, LBRACK, RBRACK, LBRACE, RBRACE, TILDE, CARAT = map(Literal, ":[]{}~^") |
|
|||
209 | LPAR, RPAR = map(Suppress, "()") |
|
|||
210 | and_, or_, not_, to_ = map(CaselessKeyword, "AND OR NOT TO".split()) |
|
|||
211 | keyword = and_ | or_ | not_ | to_ |
|
|||
212 |
|
||||
213 | expression = Forward() |
|
|||
214 |
|
||||
215 | valid_word = Regex(r'([a-zA-Z0-9*_+.-]|\\[!(){}\[\]^"~*?\\:])+').setName("word") |
|
|||
216 | valid_word.setParseAction( |
|
|||
217 | lambda t: t[0] |
|
|||
218 | .replace('\\\\', chr(127)) |
|
|||
219 | .replace('\\', '') |
|
|||
220 | .replace(chr(127), '\\') |
|
|||
221 | ) |
|
|||
222 |
|
||||
223 | string = QuotedString('"') |
|
|||
224 |
|
||||
225 | required_modifier = Literal("+")("required") |
|
|||
226 | prohibit_modifier = Literal("-")("prohibit") |
|
|||
227 | integer = Regex(r"\d+").setParseAction(lambda t: int(t[0])) |
|
|||
228 | proximity_modifier = Group(TILDE + integer("proximity")) |
|
|||
229 | number = pyparsing_common.fnumber() |
|
|||
230 | fuzzy_modifier = TILDE + Optional(number, default=0.5)("fuzzy") |
|
|||
231 |
|
||||
232 | term = Forward() |
|
|||
233 | field_name = valid_word().setName("fieldname") |
|
|||
234 | incl_range_search = Group(LBRACK + term("lower") + to_ + term("upper") + RBRACK) |
|
|||
235 | excl_range_search = Group(LBRACE + term("lower") + to_ + term("upper") + RBRACE) |
|
|||
236 | range_search = incl_range_search("incl_range") | excl_range_search("excl_range") |
|
|||
237 | boost = (CARAT + number("boost")) |
|
|||
238 |
|
||||
239 | string_expr = Group(string + proximity_modifier) | string |
|
|||
240 | word_expr = Group(valid_word + fuzzy_modifier) | valid_word |
|
|||
241 | term << (Optional(field_name("field") + COLON) + |
|
|||
242 | (word_expr | string_expr | range_search | Group( |
|
|||
243 | LPAR + expression + RPAR)) + |
|
|||
244 | Optional(boost)) |
|
|||
245 | term.setParseAction(lambda t: [t] if 'field' in t or 'boost' in t else None) |
|
|||
246 |
|
||||
247 | expression << infixNotation( |
|
|||
248 | term, |
|
|||
249 | [ |
|
|||
250 | (required_modifier | prohibit_modifier, 1, opAssoc.RIGHT), |
|
|||
251 | ((not_ | '!').setParseAction(lambda: "NOT"), 1, opAssoc.RIGHT), |
|
|||
252 | ((and_ | '&&').setParseAction(lambda: "AND"), 2, opAssoc.LEFT), |
|
|||
253 | (Optional(or_ | '||').setParseAction(lambda: "OR"), 2, opAssoc.LEFT), |
|
|||
254 | ] |
|
|||
255 | ) |
|
|||
256 |
|
||||
257 | return expression |
|
@@ -2236,6 +2236,10 b' h3.files_location{' | |||||
2236 | clear: both; |
|
2236 | clear: both; | |
2237 | margin: 0 0 @padding; |
|
2237 | margin: 0 0 @padding; | |
2238 | } |
|
2238 | } | |
|
2239 | ||||
|
2240 | .search-tags { | |||
|
2241 | padding: 5px 0; | |||
|
2242 | } | |||
2239 | } |
|
2243 | } | |
2240 |
|
2244 | |||
2241 | div.search-feedback-items { |
|
2245 | div.search-feedback-items { |
@@ -300,6 +300,10 b' mark,' | |||||
300 | margin-top: @padding; |
|
300 | margin-top: @padding; | |
301 | } |
|
301 | } | |
302 | } |
|
302 | } | |
|
303 | ||||
|
304 | .repo-group-desc { | |||
|
305 | padding: 8px 0px 0px 0px; | |||
|
306 | } | |||
303 | } |
|
307 | } | |
304 |
|
308 | |||
305 | .title-main { |
|
309 | .title-main { |
@@ -281,7 +281,9 b' function registerRCRoutes() {' | |||||
281 | pyroutes.register('edit_user_group_advanced_sync', '/_admin/user_groups/%(user_group_id)s/edit/advanced/sync', ['user_group_id']); |
|
281 | pyroutes.register('edit_user_group_advanced_sync', '/_admin/user_groups/%(user_group_id)s/edit/advanced/sync', ['user_group_id']); | |
282 | pyroutes.register('user_groups_delete', '/_admin/user_groups/%(user_group_id)s/delete', ['user_group_id']); |
|
282 | pyroutes.register('user_groups_delete', '/_admin/user_groups/%(user_group_id)s/delete', ['user_group_id']); | |
283 | pyroutes.register('search', '/_admin/search', []); |
|
283 | pyroutes.register('search', '/_admin/search', []); | |
284 | pyroutes.register('search_repo', '/%(repo_name)s/search', ['repo_name']); |
|
284 | pyroutes.register('search_repo', '/%(repo_name)s/_search', ['repo_name']); | |
|
285 | pyroutes.register('search_repo_alt', '/%(repo_name)s/search', ['repo_name']); | |||
|
286 | pyroutes.register('search_repo_group', '/%(repo_group_name)s/_search', ['repo_group_name']); | |||
285 | pyroutes.register('user_profile', '/_profiles/%(username)s', ['username']); |
|
287 | pyroutes.register('user_profile', '/_profiles/%(username)s', ['username']); | |
286 | pyroutes.register('user_group_profile', '/_profile_user_group/%(user_group_name)s', ['user_group_name']); |
|
288 | pyroutes.register('user_group_profile', '/_profile_user_group/%(user_group_name)s', ['user_group_name']); | |
287 | pyroutes.register('my_account_profile', '/_admin/my_account/profile', []); |
|
289 | pyroutes.register('my_account_profile', '/_admin/my_account/profile', []); |
@@ -4,17 +4,9 b'' | |||||
4 |
|
4 | |||
5 | <%def name="breadcrumbs_links()"> |
|
5 | <%def name="breadcrumbs_links()"> | |
6 | %if c.repo: |
|
6 | %if c.repo: | |
7 | ${h.link_to('Settings',h.route_path('edit_repo', repo_name=c.repo.repo_name))} |
|
7 | ${_('Settings')} | |
8 | » |
|
|||
9 | ${h.link_to(_('Integrations'),request.route_url(route_name='repo_integrations_home', repo_name=c.repo.repo_name))} |
|
|||
10 | %elif c.repo_group: |
|
8 | %elif c.repo_group: | |
11 | ${h.link_to(_('Admin'),h.route_path('admin_home'))} |
|
9 | ${_('Settings')} | |
12 | » |
|
|||
13 | ${h.link_to(_('Repository Groups'),h.route_path('repo_groups'))} |
|
|||
14 | » |
|
|||
15 | ${h.link_to(c.repo_group.group_name,h.route_path('edit_repo_group', repo_group_name=c.repo_group.group_name))} |
|
|||
16 | » |
|
|||
17 | ${h.link_to(_('Integrations'),request.route_url(route_name='repo_group_integrations_home', repo_group_name=c.repo_group.group_name))} |
|
|||
18 | %else: |
|
10 | %else: | |
19 | ${h.link_to(_('Admin'),h.route_path('admin_home'))} |
|
11 | ${h.link_to(_('Admin'),h.route_path('admin_home'))} | |
20 | » |
|
12 | » |
@@ -8,26 +8,12 b'' | |||||
8 | %endif |
|
8 | %endif | |
9 | </%def> |
|
9 | </%def> | |
10 |
|
10 | |||
11 |
<%def name=" |
|
11 | <%def name="menu_bar_nav()"> | |
12 | ${h.link_to(_('Admin'),h.route_path('admin_home'))} |
|
12 | ${self.menu_items(active='admin')} | |
13 | » |
|
|||
14 | ${h.link_to(_('Repository Groups'),h.route_path('repo_groups'))} |
|
|||
15 | %if c.repo_group.parent_group: |
|
|||
16 | » ${h.link_to(c.repo_group.parent_group.name, h.route_path('repo_group_home', repo_group_name=c.repo_group.parent_group.group_name))} |
|
|||
17 | %endif |
|
|||
18 | » ${c.repo_group.name} |
|
|||
19 | </%def> |
|
13 | </%def> | |
20 |
|
14 | |||
21 |
<%def name=" |
|
15 | <%def name="menu_bar_subnav()"> | |
22 | <ul class="links"> |
|
16 | ${self.repo_group_menu(active='options')} | |
23 | <li> |
|
|||
24 | <a href="${h.route_path('repo_group_new', _query=dict(parent_group=c.repo_group.group_id))}" class="btn btn-small btn-success">${_(u'Add Child Group')}</a> |
|
|||
25 | </li> |
|
|||
26 | </ul> |
|
|||
27 | </%def> |
|
|||
28 |
|
||||
29 | <%def name="menu_bar_nav()"> |
|
|||
30 | ${self.menu_items(active='admin')} |
|
|||
31 | </%def> |
|
17 | </%def> | |
32 |
|
18 | |||
33 | <%def name="main_content()"> |
|
19 | <%def name="main_content()"> | |
@@ -35,10 +21,10 b'' | |||||
35 | </%def> |
|
21 | </%def> | |
36 |
|
22 | |||
37 | <%def name="main()"> |
|
23 | <%def name="main()"> | |
|
24 | ||||
38 | <div class="box"> |
|
25 | <div class="box"> | |
39 | <div class="title"> |
|
26 | <div class="title"> | |
40 | ${self.breadcrumbs()} |
|
27 | ${self.repo_group_page_title(c.repo_group)} | |
41 | ${self.breadcrumbs_side_links()} |
|
|||
42 | </div> |
|
28 | </div> | |
43 |
|
29 | |||
44 | <div class="sidebar-col-wrapper"> |
|
30 | <div class="sidebar-col-wrapper"> | |
@@ -58,4 +44,5 b'' | |||||
58 |
|
44 | |||
59 | </div> |
|
45 | </div> | |
60 | </div> |
|
46 | </div> | |
|
47 | ||||
61 | </%def> |
|
48 | </%def> |
@@ -36,7 +36,7 b'' | |||||
36 | <div class="box"> |
|
36 | <div class="box"> | |
37 | <div class="title"> |
|
37 | <div class="title"> | |
38 | ${self.repo_page_title(c.rhodecode_db_repo)} |
|
38 | ${self.repo_page_title(c.rhodecode_db_repo)} | |
39 | ${self.breadcrumbs()} |
|
39 | ||
40 | </div> |
|
40 | </div> | |
41 |
|
41 | |||
42 | <div class="sidebar-col-wrapper scw-small"> |
|
42 | <div class="sidebar-col-wrapper scw-small"> |
@@ -180,7 +180,7 b'' | |||||
180 | %endif |
|
180 | %endif | |
181 |
|
181 | |||
182 | ## repo name with group name |
|
182 | ## repo name with group name | |
183 |
${h.breadcrumb_repo_link( |
|
183 | ${h.breadcrumb_repo_link(repo_instance)} | |
184 |
|
184 | |||
185 | </div> |
|
185 | </div> | |
186 |
|
186 | |||
@@ -251,7 +251,7 b'' | |||||
251 | </a> |
|
251 | </a> | |
252 | <ul class="submenu"> |
|
252 | <ul class="submenu"> | |
253 | %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): |
|
253 | %if h.HasRepoPermissionAll('repository.admin')(c.repo_name): | |
254 | <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Settings')}</a></li> |
|
254 | <li><a href="${h.route_path('edit_repo',repo_name=c.repo_name)}">${_('Repository Settings')}</a></li> | |
255 | %endif |
|
255 | %endif | |
256 | %if c.rhodecode_db_repo.fork: |
|
256 | %if c.rhodecode_db_repo.fork: | |
257 | <li> |
|
257 | <li> | |
@@ -297,6 +297,73 b'' | |||||
297 |
|
297 | |||
298 | </%def> |
|
298 | </%def> | |
299 |
|
299 | |||
|
300 | <%def name="repo_group_page_title(repo_group_instance)"> | |||
|
301 | <div class="title-content"> | |||
|
302 | <div class="title-main"> | |||
|
303 | ## Repository Group icon | |||
|
304 | <i class="icon-folder-close"></i> | |||
|
305 | ||||
|
306 | ## repo name with group name | |||
|
307 | ${h.breadcrumb_repo_group_link(repo_group_instance)} | |||
|
308 | </div> | |||
|
309 | ||||
|
310 | <%namespace name="dt" file="/data_table/_dt_elements.mako"/> | |||
|
311 | <div class="repo-group-desc"> | |||
|
312 | ${dt.repo_group_desc(repo_group_instance.description_safe, repo_group_instance.personal, c.visual.stylify_metatags)} | |||
|
313 | </div> | |||
|
314 | ||||
|
315 | </div> | |||
|
316 | </%def> | |||
|
317 | ||||
|
318 | <%def name="repo_group_menu(active=None)"> | |||
|
319 | <% | |||
|
320 | def is_active(selected): | |||
|
321 | if selected == active: | |||
|
322 | return "active" | |||
|
323 | ||||
|
324 | is_admin = h.HasPermissionAny('hg.admin')('can create repos index page') | |||
|
325 | ||||
|
326 | gr_name = c.repo_group.group_name if c.repo_group else None | |||
|
327 | # create repositories with write permission on group is set to true | |||
|
328 | create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')() | |||
|
329 | group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page') | |||
|
330 | group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page') | |||
|
331 | ||||
|
332 | %> | |||
|
333 | ||||
|
334 | <!--- CONTEXT BAR --> | |||
|
335 | <div id="context-bar"> | |||
|
336 | <div class="wrapper"> | |||
|
337 | <ul id="context-pages" class="navigation horizontal-list"> | |||
|
338 | <li class="${is_active('home')}"><a class="menulink" href="${h.route_path('repo_group_home', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Group Home')}</div></a></li> | |||
|
339 | <li class="${is_active('search')}"><a class="menulink" href="${h.route_path('search_repo_group', repo_group_name=c.repo_group.group_name)}"><div class="menulabel">${_('Search')}</div></a></li> | |||
|
340 | ||||
|
341 | <li class="${is_active('options')}"> | |||
|
342 | <a class="menulink dropdown"> | |||
|
343 | <div class="menulabel">${_('Options')} <div class="show_more"></div></div> | |||
|
344 | </a> | |||
|
345 | <ul class="submenu"> | |||
|
346 | %if is_admin or group_admin: | |||
|
347 | <li><a href="${h.route_path('edit_repo_group',repo_group_name=c.repo_group.group_name)}" title="${_('You have admin right to this group, and can edit it')}">${_('Group Settings')}</a></li> | |||
|
348 | %endif | |||
|
349 | %if is_admin or group_admin or (group_write and create_on_write): | |||
|
350 | <li><a href="${h.route_path('repo_new',_query=dict(parent_group=c.repo_group.group_id))}">${_('Add Repository')}</a></li> | |||
|
351 | %endif | |||
|
352 | %if is_admin or group_admin: | |||
|
353 | <li><a href="${h.route_path('repo_group_new',_query=dict(parent_group=c.repo_group.group_id))}">${_(u'Add Parent Group')}</a></li> | |||
|
354 | %endif | |||
|
355 | </ul> | |||
|
356 | </li> | |||
|
357 | </ul> | |||
|
358 | </div> | |||
|
359 | <div class="clear"></div> | |||
|
360 | </div> | |||
|
361 | ||||
|
362 | <!--- END CONTEXT BAR --> | |||
|
363 | ||||
|
364 | </%def> | |||
|
365 | ||||
|
366 | ||||
300 | <%def name="usermenu(active=False)"> |
|
367 | <%def name="usermenu(active=False)"> | |
301 | ## USER MENU |
|
368 | ## USER MENU | |
302 | <li id="quick_login_li" class="${'active' if active else ''}"> |
|
369 | <li id="quick_login_li" class="${'active' if active else ''}"> |
@@ -1,13 +1,27 b'' | |||||
1 | <%inherit file="/base/base.mako"/> |
|
1 | <%inherit file="/base/base.mako"/> | |
2 |
|
2 | |||
|
3 | ||||
|
4 | <%def name="menu_bar_subnav()"> | |||
|
5 | % if c.repo_group: | |||
|
6 | ${self.repo_group_menu(active='home')} | |||
|
7 | % endif | |||
|
8 | </%def> | |||
|
9 | ||||
|
10 | ||||
3 | <%def name="main()"> |
|
11 | <%def name="main()"> | |
4 | <div class="box"> |
|
12 | <div class="box"> | |
5 | <!-- box / title --> |
|
13 | <!-- box / title --> | |
6 | <div class="title"> |
|
14 | <div class="title"> | |
7 | <div class="block-left breadcrumbs"> |
|
15 | % if c.repo_group: | |
8 |
|
|
16 | ${self.repo_group_page_title(c.repo_group)} | |
9 | <span id="match_container" style="display:none"><span id="match_count">0</span> ${_('matches')}</span> |
|
17 | ## context actions | |
|
18 | <div> | |||
|
19 | <ul class="links icon-only-links block-right"> | |||
|
20 | <li></li> | |||
|
21 | </ul> | |||
10 | </div> |
|
22 | </div> | |
|
23 | % endif | |||
|
24 | ||||
11 |
|
|
25 | %if c.rhodecode_user.username != h.DEFAULT_USER: | |
12 | <div class="block-right"> |
|
26 | <div class="block-right"> | |
13 | <% |
|
27 | <% | |
@@ -15,12 +29,6 b'' | |||||
15 | create_repo = h.HasPermissionAny('hg.create.repository')('can create repository index page') |
|
29 | create_repo = h.HasPermissionAny('hg.create.repository')('can create repository index page') | |
16 | create_repo_group = h.HasPermissionAny('hg.repogroup.create.true')('can create repository groups index page') |
|
30 | create_repo_group = h.HasPermissionAny('hg.repogroup.create.true')('can create repository groups index page') | |
17 | create_user_group = h.HasPermissionAny('hg.usergroup.create.true')('can create user groups index page') |
|
31 | create_user_group = h.HasPermissionAny('hg.usergroup.create.true')('can create user groups index page') | |
18 |
|
||||
19 | gr_name = c.repo_group.group_name if c.repo_group else None |
|
|||
20 | # create repositories with write permission on group is set to true |
|
|||
21 | create_on_write = h.HasPermissionAny('hg.create.write_on_repogroup.true')() |
|
|||
22 | group_admin = h.HasRepoGroupPermissionAny('group.admin')(gr_name, 'group admin index page') |
|
|||
23 | group_write = h.HasRepoGroupPermissionAny('group.write')(gr_name, 'can write into group index page') |
|
|||
24 | %> |
|
32 | %> | |
25 |
|
33 | |||
26 | %if not c.repo_group: |
|
34 | %if not c.repo_group: | |
@@ -32,17 +40,6 b'' | |||||
32 | %if is_admin or create_repo_group: |
|
40 | %if is_admin or create_repo_group: | |
33 | <a href="${h.route_path('repo_group_new')}" class="btn btn-small btn-default">${_(u'Add Repository Group')}</a> |
|
41 | <a href="${h.route_path('repo_group_new')}" class="btn btn-small btn-default">${_(u'Add Repository Group')}</a> | |
34 | %endif |
|
42 | %endif | |
35 | %else: |
|
|||
36 | ##we're inside other repository group other terms apply |
|
|||
37 | %if is_admin or group_admin or (group_write and create_on_write): |
|
|||
38 | <a href="${h.route_path('repo_new',_query=dict(parent_group=c.repo_group.group_id))}" class="btn btn-small btn-success btn-primary">${_('Add Repository')}</a> |
|
|||
39 | %endif |
|
|||
40 | %if is_admin or group_admin: |
|
|||
41 | <a href="${h.route_path('repo_group_new',_query=dict(parent_group=c.repo_group.group_id))}" class="btn btn-small btn-default">${_(u'Add Repository Group')}</a> |
|
|||
42 | %endif |
|
|||
43 | %if is_admin or group_admin: |
|
|||
44 | <a href="${h.route_path('edit_repo_group',repo_group_name=c.repo_group.group_name)}" title="${_('You have admin right to this group, and can edit it')}" class="btn btn-small btn-primary">${_('Edit Repository Group')}</a> |
|
|||
45 | %endif |
|
|||
46 | %endif |
|
43 | %endif | |
47 | </div> |
|
44 | </div> | |
48 | %endif |
|
45 | %endif |
@@ -33,7 +33,7 b'' | |||||
33 |
|
33 | |||
34 |
|
34 | |||
35 | <div class="pr-details-title"> |
|
35 | <div class="pr-details-title"> | |
36 |
${_(' |
|
36 | ${_('Summary')} | |
37 | </div> |
|
37 | </div> | |
38 |
|
38 | |||
39 | <div class="form" style="padding-top: 10px"> |
|
39 | <div class="form" style="padding-top: 10px"> |
@@ -3,7 +3,9 b'' | |||||
3 |
|
3 | |||
4 | <%def name="title()"> |
|
4 | <%def name="title()"> | |
5 | %if c.repo_name: |
|
5 | %if c.repo_name: | |
6 |
${_('Search inside repository |
|
6 | ${_('Search inside repository {repo_name}').format(repo_name=c.repo_name)} | |
|
7 | %elif c.repo_group_name: | |||
|
8 | ${_('Search inside repository group {repo_group_name}').format(repo_group_name=c.repo_group_name)} | |||
7 | %else: |
|
9 | %else: | |
8 | ${_('Search inside all accessible repositories')} |
|
10 | ${_('Search inside all accessible repositories')} | |
9 | %endif |
|
11 | %endif | |
@@ -14,7 +16,9 b'' | |||||
14 |
|
16 | |||
15 | <%def name="breadcrumbs_links()"> |
|
17 | <%def name="breadcrumbs_links()"> | |
16 | %if c.repo_name: |
|
18 | %if c.repo_name: | |
17 |
${_('Search inside repository |
|
19 | ${_('Search inside repository {repo_name}').format(repo_name=c.repo_name)} | |
|
20 | %elif c.repo_group_name: | |||
|
21 | ${_('Search inside repository group {repo_group_name}').format(repo_group_name=c.repo_group_name)} | |||
18 | %else: |
|
22 | %else: | |
19 | ${_('Search inside all accessible repositories')} |
|
23 | ${_('Search inside all accessible repositories')} | |
20 | %endif |
|
24 | %endif | |
@@ -23,7 +27,9 b'' | |||||
23 |
|
27 | |||
24 | <%def name="menu_bar_nav()"> |
|
28 | <%def name="menu_bar_nav()"> | |
25 | %if c.repo_name: |
|
29 | %if c.repo_name: | |
26 |
${self.menu_items(active=' |
|
30 | ${self.menu_items(active='search')} | |
|
31 | %elif c.repo_group_name: | |||
|
32 | ${self.menu_items(active='search')} | |||
27 | %else: |
|
33 | %else: | |
28 | ${self.menu_items(active='search')} |
|
34 | ${self.menu_items(active='search')} | |
29 | %endif |
|
35 | %endif | |
@@ -32,6 +38,8 b'' | |||||
32 | <%def name="menu_bar_subnav()"> |
|
38 | <%def name="menu_bar_subnav()"> | |
33 | %if c.repo_name: |
|
39 | %if c.repo_name: | |
34 | ${self.repo_menu(active='search')} |
|
40 | ${self.repo_menu(active='search')} | |
|
41 | %elif c.repo_group_name: | |||
|
42 | ${self.repo_group_menu(active='search')} | |||
35 | %endif |
|
43 | %endif | |
36 | </%def> |
|
44 | </%def> | |
37 |
|
45 | |||
@@ -43,6 +51,12 b'' | |||||
43 | ${self.repo_page_title(c.rhodecode_db_repo)} |
|
51 | ${self.repo_page_title(c.rhodecode_db_repo)} | |
44 | </div> |
|
52 | </div> | |
45 | ${h.form(h.route_path('search_repo',repo_name=c.repo_name),method='get')} |
|
53 | ${h.form(h.route_path('search_repo',repo_name=c.repo_name),method='get')} | |
|
54 | %elif c.repo_group_name: | |||
|
55 | <!-- box / title --> | |||
|
56 | <div class="title"> | |||
|
57 | ${self.repo_group_page_title(c.repo_group)} | |||
|
58 | </div> | |||
|
59 | ${h.form(h.route_path('search_repo_group',repo_group_name=c.repo_group_name),method='get')} | |||
46 | %else: |
|
60 | %else: | |
47 | <!-- box / title --> |
|
61 | <!-- box / title --> | |
48 | <div class="title"> |
|
62 | <div class="title"> | |
@@ -54,13 +68,43 b'' | |||||
54 | %endif |
|
68 | %endif | |
55 | <div class="form search-form"> |
|
69 | <div class="form search-form"> | |
56 | <div class="fields"> |
|
70 | <div class="fields"> | |
|
71 | ||||
57 | ${h.text('q', c.cur_query, placeholder="Enter query...")} |
|
72 | ${h.text('q', c.cur_query, placeholder="Enter query...")} | |
58 |
|
73 | |||
59 | ${h.select('type',c.search_type,[('content',_('Files')), ('path',_('File path')),('commit',_('Commits'))],id='id_search_type')} |
|
74 | ${h.select('type',c.search_type,[('content',_('Files')), ('path',_('File path')),('commit',_('Commits'))],id='id_search_type')} | |
60 | ${h.hidden('max_lines', '10')} |
|
75 | ${h.hidden('max_lines', '10')} | |
|
76 | ||||
61 | <input type="submit" value="${_('Search')}" class="btn"/> |
|
77 | <input type="submit" value="${_('Search')}" class="btn"/> | |
62 | <br/> |
|
78 | <br/> | |
63 |
|
79 | |||
|
80 | <div class="search-tags"> | |||
|
81 | %if c.repo_name: | |||
|
82 | <span class="tag tag-ok disabled"> | |||
|
83 | %if h.is_hg(c.rhodecode_db_repo): | |||
|
84 | <i class="icon-hg"></i> | |||
|
85 | %endif | |||
|
86 | %if h.is_git(c.rhodecode_db_repo): | |||
|
87 | <i class="icon-git"></i> | |||
|
88 | %endif | |||
|
89 | %if h.is_svn(c.rhodecode_db_repo): | |||
|
90 | <i class="icon-svn"></i> | |||
|
91 | %endif | |||
|
92 | ${c.repo_name} | |||
|
93 | </span> | |||
|
94 | ||||
|
95 | %elif c.repo_group_name: | |||
|
96 | <span class="tag tag-ok disabled"> | |||
|
97 | <i class="icon-folder-close"></i> | |||
|
98 | ${c.repo_group_name} | |||
|
99 | </span> | |||
|
100 | %endif | |||
|
101 | ||||
|
102 | % for search_tag in c.search_tags: | |||
|
103 | <span class="tag tag-ok disabled">${search_tag}</span> | |||
|
104 | % endfor | |||
|
105 | ||||
|
106 | </div> | |||
|
107 | ||||
64 | <div class="search-feedback-items"> |
|
108 | <div class="search-feedback-items"> | |
65 | % for error in c.errors: |
|
109 | % for error in c.errors: | |
66 | <span class="error-message"> |
|
110 | <span class="error-message"> | |
@@ -140,13 +184,18 b' search type: ${handler.search_type_label' | |||||
140 | </div> |
|
184 | </div> | |
141 | <script> |
|
185 | <script> | |
142 | $(document).ready(function(){ |
|
186 | $(document).ready(function(){ | |
143 | $('#q').autoGrowInput(); |
|
|||
144 | $("#id_search_type").select2({ |
|
187 | $("#id_search_type").select2({ | |
145 | 'containerCssClass': "drop-menu", |
|
188 | 'containerCssClass': "drop-menu", | |
146 | 'dropdownCssClass': "drop-menu-dropdown", |
|
189 | 'dropdownCssClass': "drop-menu-dropdown", | |
147 | 'dropdownAutoWidth': true, |
|
190 | 'dropdownAutoWidth': true, | |
148 | 'minimumResultsForSearch': -1 |
|
191 | 'minimumResultsForSearch': -1 | |
149 | }); |
|
192 | }); | |
|
193 | ||||
|
194 | $('#q').autoGrowInput({maxWidth: 920}); | |||
|
195 | ||||
|
196 | setTimeout(function() { | |||
|
197 | $('#q').keyup() | |||
|
198 | }, 1); | |||
150 | }) |
|
199 | }) | |
151 | </script> |
|
200 | </script> | |
152 | </%def> |
|
201 | </%def> |
@@ -11,16 +11,19 b'' | |||||
11 |
|
11 | |||
12 | <div class="title"> |
|
12 | <div class="title"> | |
13 | ${self.repo_page_title(c.rhodecode_db_repo)} |
|
13 | ${self.repo_page_title(c.rhodecode_db_repo)} | |
|
14 | ## Context Action | |||
|
15 | <div> | |||
14 | <ul class="links icon-only-links block-right"> |
|
16 | <ul class="links icon-only-links block-right"> | |
15 | <li> |
|
17 | <li> | |
16 | %if c.rhodecode_user.username != h.DEFAULT_USER: |
|
18 | %if c.rhodecode_user.username != h.DEFAULT_USER: | |
17 | <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name, _query=dict(auth_token=c.rhodecode_user.feed_token))}" title="${_('RSS Feed')}"><i class="icon-rss-sign"></i></a> |
|
19 | <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name, _query=dict(auth_token=c.rhodecode_user.feed_token))}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a> | |
18 | %else: |
|
20 | %else: | |
19 | <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name)}" title="${_('RSS Feed')}"><i class="icon-rss-sign"></i></a> |
|
21 | <a href="${h.route_path('atom_feed_home', repo_name=c.rhodecode_db_repo.repo_name)}" title="${_('RSS Feed')}" class="btn btn-sm"><i class="icon-rss-sign"></i>RSS</a> | |
20 | %endif |
|
22 | %endif | |
21 | </li> |
|
23 | </li> | |
22 | </ul> |
|
24 | </ul> | |
23 | </div> |
|
25 | </div> | |
|
26 | </div> | |||
24 |
|
27 | |||
25 | <div id="repo-summary" class="summary"> |
|
28 | <div id="repo-summary" class="summary"> | |
26 | ${components.summary_detail(breadcrumbs_links=self.breadcrumbs_links(), show_downloads=True)} |
|
29 | ${components.summary_detail(breadcrumbs_links=self.breadcrumbs_links(), show_downloads=True)} |
General Comments 0
You need to be logged in to leave comments.
Login now