##// END OF EJS Templates
Added searching for file names within the repository in rhodecode
marcink -
r556:65b2f150 default
parent child Browse files
Show More
1 NO CONTENT: new file 100644
@@ -0,0 +1,31 b''
1 ##content highligthing
2
3 %for cnt,sr in enumerate(c.formated_results):
4 %if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(sr['repository'],'search results check'):
5 <div class="table">
6 <div id="body${cnt}" class="codeblock">
7 <div class="code-header">
8 <div class="revision">${h.link_to(h.literal('%s &raquo; %s' % (sr['repository'],sr['f_path'])),
9 h.url('files_home',repo_name=sr['repository'],revision='tip',f_path=sr['f_path']))}</div>
10 </div>
11 <div class="code-body">
12 <pre>${h.literal(sr['content_short_hl'])}</pre>
13 </div>
14 </div>
15 </div>
16 %else:
17 %if cnt == 0:
18 <div class="table">
19 <div id="body${cnt}" class="codeblock">
20 <div class="error">${_('Permission denied')}</div>
21 </div>
22 </div>
23 %endif
24
25 %endif
26 %endfor
27 %if c.cur_query and c.formated_results:
28 <div class="pagination-wh pagination-left">
29 ${c.formated_results.pager('$link_previous ~2~ $link_next')}
30 </div>
31 %endif No newline at end of file
@@ -0,0 +1,27 b''
1 ##path search
2 <div class="search">
3 %for cnt,sr in enumerate(c.formated_results):
4 %if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(sr['repository'],'search results check'):
5 <div class="search_path">
6 <div class="link">
7 ${h.link_to(h.literal('%s &raquo; %s' % (sr['repository'],sr['f_path'])),
8 h.url('files_home',repo_name=sr['repository'],revision='tip',f_path=sr['f_path']))}
9 </div>
10 </div>
11 %else:
12 %if cnt == 0:
13 <div class="error">
14 <div class="link">
15 ${_('Permission denied')}
16 </div>
17 </div>
18 %endif
19
20 %endif
21 %endfor
22 %if c.cur_query and c.formated_results:
23 <div class="pagination-wh pagination-left">
24 ${c.formated_results.pager('$link_previous ~2~ $link_next')}
25 </div>
26 %endif
27 </div> No newline at end of file
1 NO CONTENT: new file 100644
@@ -49,6 +49,14 b' class SearchController(BaseController):'
49 49 c.formated_results = []
50 50 c.runtime = ''
51 51 c.cur_query = request.GET.get('q', None)
52 c.cur_type = request.GET.get('type', 'source')
53 c.cur_search = search_type = {'content':'content',
54 'commit':'content',
55 'path':'path',
56 'repository':'repository'}\
57 .get(c.cur_type, 'content')
58
59
52 60 if c.cur_query:
53 61 cur_query = c.cur_query.lower()
54 62
@@ -59,7 +67,7 b' class SearchController(BaseController):'
59 67 idx = open_dir(IDX_LOCATION, indexname=IDX_NAME)
60 68 searcher = idx.searcher()
61 69
62 qp = QueryParser("content", schema=SCHEMA)
70 qp = QueryParser(search_type, schema=SCHEMA)
63 71 if c.repo_name:
64 72 cur_query = u'repository:%s %s' % (c.repo_name, cur_query)
65 73 try:
@@ -82,13 +90,16 b' class SearchController(BaseController):'
82 90 % (res_ln, results.runtime)
83 91
84 92 def url_generator(**kw):
85 return update_params("?q=%s" % c.cur_query, **kw)
93 return update_params("?q=%s&type=%s" \
94 % (c.cur_query, c.cur_search), **kw)
86 95
87 96 c.formated_results = Page(
88 ResultWrapper(searcher, matcher, highlight_items),
97 ResultWrapper(search_type, searcher, matcher,
98 highlight_items),
89 99 page=p, item_count=res_ln,
90 100 items_per_page=10, url=url_generator)
91 101
102
92 103 except QueryParserError:
93 104 c.runtime = _('Invalid search query. Try quoting it.')
94 105 searcher.close()
@@ -38,7 +38,7 b' ANALYZER = RegexTokenizer(expression=r"\\'
38 38 #INDEX SCHEMA DEFINITION
39 39 SCHEMA = Schema(owner=TEXT(),
40 40 repository=TEXT(stored=True),
41 path=ID(stored=True, unique=True),
41 path=TEXT(stored=True),
42 42 content=FieldType(format=Characters(ANALYZER),
43 43 scorable=True, stored=True),
44 44 modtime=STORED(), extension=TEXT(stored=True))
@@ -49,7 +49,8 b" FORMATTER = HtmlFormatter('span', betwee"
49 49 FRAGMENTER = SimpleFragmenter(200)
50 50
51 51 class ResultWrapper(object):
52 def __init__(self, searcher, matcher, highlight_items):
52 def __init__(self, search_type, searcher, matcher, highlight_items):
53 self.search_type = search_type
53 54 self.searcher = searcher
54 55 self.matcher = matcher
55 56 self.highlight_items = highlight_items
@@ -113,7 +114,7 b' class ResultWrapper(object):'
113 114 """
114 115 Smart function that implements chunking the content
115 116 but not overlap chunks so it doesn't highlight the same
116 close occurences twice.
117 close occurrences twice.
117 118 @param matcher:
118 119 @param size:
119 120 """
@@ -130,6 +131,8 b' class ResultWrapper(object):'
130 131 yield (start_offseted, end_offseted,)
131 132
132 133 def highlight(self, content, top=5):
134 if self.search_type != 'content':
135 return ''
133 136 hl = highlight(escape(content),
134 137 self.highlight_items,
135 138 analyzer=ANALYZER,
@@ -1318,6 +1318,12 b' div.options a:hover'
1318 1318 padding: 0 0 10px 0;
1319 1319 }
1320 1320
1321 #content div.box div.form div.fields div.field-noborder
1322 {
1323 border-bottom: 0px !important;
1324 }
1325
1326
1321 1327 #content div.box div.form div.fields div.field span.error-message
1322 1328 {
1323 1329 margin: 8px 0 0 0;
@@ -3311,6 +3317,36 b' table.code-browser .browser-dir {'
3311 3317 }
3312 3318
3313 3319 /* -----------------------------------------------------------
3320 SEARCH
3321 ----------------------------------------------------------- */
3322
3323 .box .search {
3324 clear:both;
3325 margin:0;
3326 overflow:hidden;
3327 padding:0 20px 10px;
3328 }
3329 .box .search div.search_path{
3330 background:none repeat scroll 0 0 #EEEEEE;
3331 border:1px solid #CCCCCC;
3332
3333 color:blue;
3334 padding:10px 0;
3335 margin-bottom:10px;
3336 }
3337 .box .search div.search_path div.link{
3338 font-weight:bold;
3339 margin-left:25px;
3340 }
3341 .box .search div.search_path div.link a{
3342 color:#0066CC;
3343 cursor:pointer;
3344 text-decoration:none;
3345 }
3346
3347
3348
3349 /* -----------------------------------------------------------
3314 3350 ADMIN - SETTINGS
3315 3351 ----------------------------------------------------------- */
3316 3352 #path_unlock{
@@ -36,51 +36,42 b''
36 36 %endif
37 37 <div class="form">
38 38 <div class="fields">
39 <div class="field field-first field-noborder">
40 <div class="label">
41 <label for="q">${_('Search term')}</label>
42 </div>
43 <div class="input">${h.text('q',c.cur_query,class_="small")}</div>
44 <div class="button highlight">
45 <input type="submit" value="${_('Search')}" class="ui-button ui-widget ui-state-default ui-corner-all"/>
46 </div>
47 <div style="font-weight: bold;clear:Both;margin-left:200px">${c.runtime}</div>
48 </div>
39 49
40 50 <div class="field ">
41 51 <div class="label">
42 <label for="q">${_('Search')}:</label>
52 <label for="type">${_('Search in')}</label>
43 53 </div>
44 <div class="input">
45 ${h.text('q',c.cur_query,class_="small")}
46 <div class="button highlight">
47 <input type="submit" value="${_('Search')}" class="ui-button ui-widget ui-state-default ui-corner-all"/>
48 </div>
49 <div style="font-weight: bold;clear:both;padding: 5px">${c.runtime}</div>
54 <div class="select">
55 ${h.select('type',c.cur_type,[('content',_('Source codes')),
56 ##('commit',_('Commit messages')),
57 ('path',_('File names')),
58 ##('repository',_('Repository names')),
59 ])}
50 60 </div>
51 61 </div>
62
52 63 </div>
53 64 </div>
54 65 ${h.end_form()}
55 66
56 %for cnt,sr in enumerate(c.formated_results):
57 %if h.HasRepoPermissionAny('repository.write','repository.read','repository.admin')(sr['repository'],'search results check'):
58 <div class="table">
59 <div id="body${cnt}" class="codeblock">
60 <div class="code-header">
61 <div class="revision">${h.link_to(h.literal('%s &raquo; %s' % (sr['repository'],sr['f_path'])),
62 h.url('files_home',repo_name=sr['repository'],revision='tip',f_path=sr['f_path']))}</div>
63 </div>
64 <div class="code-body">
65 <pre>${h.literal(sr['content_short_hl'])}</pre>
66 </div>
67 </div>
68 </div>
69 %else:
70 %if cnt == 0:
71 <div class="table">
72 <div id="body${cnt}" class="codeblock">
73 <div class="error">${_('Permission denied')}</div>
74 </div>
75 </div>
76 %endif
77
78 %endif
79 %endfor
80 %if c.cur_query:
81 <div class="pagination-wh pagination-left">
82 ${c.formated_results.pager('$link_previous ~2~ $link_next')}
83 </div>
67 %if c.cur_search == 'content':
68 <%include file='search_content.html'/>
69 %elif c.cur_search == 'path':
70 <%include file='search_path.html'/>
71 %elif c.cur_search == 'commit':
72 <%include file='search_commit.html'/>
73 %elif c.cur_search == 'repository':
74 <%include file='search_repository.html'/>
84 75 %endif
85 76 </div>
86 77
General Comments 0
You need to be logged in to leave comments. Login now