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 » %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 » %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( |
|
|
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: |
@@ -79,16 +87,19 b' class SearchController(BaseController):' | |||
|
79 | 87 | results = searcher.search(query) |
|
80 | 88 | res_ln = len(results) |
|
81 | 89 | c.runtime = '%s results (%.3f seconds)' \ |
|
82 | % (res_ln, results.runtime) | |
|
90 | % (res_ln, results.runtime) | |
|
83 | 91 | |
|
84 | 92 | def url_generator(**kw): |
|
85 |
return update_params("?q=%s" |
|
|
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, |
|
|
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= |
|
|
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,52 +36,43 b'' | |||
|
36 | 36 | %endif |
|
37 | 37 | <div class="form"> |
|
38 | 38 | <div class="fields"> |
|
39 | ||
|
40 | <div class="field "> | |
|
41 | <div class="label"> | |
|
42 | <label for="q">${_('Search')}:</label> | |
|
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"/> | |
|
43 | 46 | </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> | |
|
50 | </div> | |
|
47 | <div style="font-weight: bold;clear:Both;margin-left:200px">${c.runtime}</div> | |
|
51 | 48 | </div> |
|
49 | ||
|
50 | <div class="field"> | |
|
51 | <div class="label"> | |
|
52 | <label for="type">${_('Search in')}</label> | |
|
53 | </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 | ])} | |
|
60 | </div> | |
|
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 » %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> | |
|
84 | %endif | |
|
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'/> | |
|
75 | %endif | |
|
85 | 76 | </div> |
|
86 | 77 | |
|
87 | 78 | </%def> |
General Comments 0
You need to be logged in to leave comments.
Login now