mirror of
				https://github.com/searxng/searxng
				synced 2024-01-01 19:24:07 +01:00 
			
		
		
		
	Merge branch 'pointhi-code_results'
This commit is contained in:
		
						commit
						75bd4556f8
					
				
					 26 changed files with 463 additions and 1018 deletions
				
			
		| 
						 | 
				
			
			@ -3,4 +3,5 @@ flask-babel
 | 
			
		|||
requests
 | 
			
		||||
lxml
 | 
			
		||||
pyyaml
 | 
			
		||||
pygments
 | 
			
		||||
python-dateutil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
 | 
			
		||||
from urllib import urlencode
 | 
			
		||||
from json import loads
 | 
			
		||||
import cgi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# engine dependent config
 | 
			
		||||
categories = ['it']
 | 
			
		||||
| 
						 | 
				
			
			@ -20,6 +20,12 @@ paging = True
 | 
			
		|||
url = 'https://searchcode.com/'
 | 
			
		||||
search_url = url+'api/codesearch_I/?{query}&p={pageno}'
 | 
			
		||||
 | 
			
		||||
# special code-endings which are not recognised by the file ending
 | 
			
		||||
code_endings = {'cs': 'c#',
 | 
			
		||||
                'h': 'c',
 | 
			
		||||
                'hpp': 'cpp',
 | 
			
		||||
                'cxx': 'cpp'}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# do search-request
 | 
			
		||||
def request(query, params):
 | 
			
		||||
| 
						 | 
				
			
			@ -39,27 +45,24 @@ def response(resp):
 | 
			
		|||
    for result in search_results['results']:
 | 
			
		||||
        href = result['url']
 | 
			
		||||
        title = "" + result['name'] + " - " + result['filename']
 | 
			
		||||
        content = result['repo'] + "<br />"
 | 
			
		||||
        repo = result['repo']
 | 
			
		||||
 | 
			
		||||
        lines = dict()
 | 
			
		||||
        for line, code in result['lines'].items():
 | 
			
		||||
            lines[int(line)] = code
 | 
			
		||||
 | 
			
		||||
        content = content + '<pre class="code-formatter"><table class="code">'
 | 
			
		||||
        for line, code in sorted(lines.items()):
 | 
			
		||||
            content = content + '<tr><td class="line-number" style="padding-right:5px;">'
 | 
			
		||||
            content = content + str(line) + '</td><td class="code-snippet">'
 | 
			
		||||
            # Replace every two spaces with ' &nbps;' to keep formatting
 | 
			
		||||
            # while allowing the browser to break the line if necessary
 | 
			
		||||
            content = content + cgi.escape(code).replace('\t', '    ').replace('  ', '  ').replace('  ', '  ')
 | 
			
		||||
            content = content + "</td></tr>"
 | 
			
		||||
 | 
			
		||||
        content = content + "</table></pre>"
 | 
			
		||||
        code_language = code_endings.get(
 | 
			
		||||
            result['filename'].split('.')[-1].lower(),
 | 
			
		||||
            result['filename'].split('.')[-1].lower())
 | 
			
		||||
 | 
			
		||||
        # append result
 | 
			
		||||
        results.append({'url': href,
 | 
			
		||||
                        'title': title,
 | 
			
		||||
                        'content': content})
 | 
			
		||||
                        'content': '',
 | 
			
		||||
                        'repository': repo,
 | 
			
		||||
                        'codelines': sorted(lines.items()),
 | 
			
		||||
                        'code_language': code_language,
 | 
			
		||||
                        'template': 'code.html'})
 | 
			
		||||
 | 
			
		||||
    # return results
 | 
			
		||||
    return results
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										916
									
								
								searx/static/css/bootstrap.min.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										916
									
								
								searx/static/css/bootstrap.min.css
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -580,3 +580,81 @@ select {
 | 
			
		|||
  padding: 0.5em 0.8em;
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.highlight .hll { background-color: #ffffcc }
 | 
			
		||||
.highlight  { background: #f8f8f8; }
 | 
			
		||||
.highlight .c { color: #408080; font-style: italic } /* Comment */
 | 
			
		||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
 | 
			
		||||
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
 | 
			
		||||
.highlight .o { color: #666666 } /* Operator */
 | 
			
		||||
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
 | 
			
		||||
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
 | 
			
		||||
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
 | 
			
		||||
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
 | 
			
		||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
 | 
			
		||||
.highlight .ge { font-style: italic } /* Generic.Emph */
 | 
			
		||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
 | 
			
		||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
 | 
			
		||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
 | 
			
		||||
.highlight .go { color: #888888 } /* Generic.Output */
 | 
			
		||||
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
 | 
			
		||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
 | 
			
		||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
 | 
			
		||||
.highlight .gt { color: #0044DD } /* Generic.Traceback */
 | 
			
		||||
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
 | 
			
		||||
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
 | 
			
		||||
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
 | 
			
		||||
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
 | 
			
		||||
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
 | 
			
		||||
.highlight .kt { color: #B00040 } /* Keyword.Type */
 | 
			
		||||
.highlight .m { color: #666666 } /* Literal.Number */
 | 
			
		||||
.highlight .s { color: #BA2121 } /* Literal.String */
 | 
			
		||||
.highlight .na { color: #7D9029 } /* Name.Attribute */
 | 
			
		||||
.highlight .nb { color: #008000 } /* Name.Builtin */
 | 
			
		||||
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
 | 
			
		||||
.highlight .no { color: #880000 } /* Name.Constant */
 | 
			
		||||
.highlight .nd { color: #AA22FF } /* Name.Decorator */
 | 
			
		||||
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
 | 
			
		||||
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
 | 
			
		||||
.highlight .nf { color: #0000FF } /* Name.Function */
 | 
			
		||||
.highlight .nl { color: #A0A000 } /* Name.Label */
 | 
			
		||||
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
 | 
			
		||||
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
 | 
			
		||||
.highlight .nv { color: #19177C } /* Name.Variable */
 | 
			
		||||
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
 | 
			
		||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
 | 
			
		||||
.highlight .mf { color: #666666 } /* Literal.Number.Float */
 | 
			
		||||
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
 | 
			
		||||
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
 | 
			
		||||
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
 | 
			
		||||
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
 | 
			
		||||
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
 | 
			
		||||
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
 | 
			
		||||
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
 | 
			
		||||
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
 | 
			
		||||
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
 | 
			
		||||
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
 | 
			
		||||
.highlight .sx { color: #008000 } /* Literal.String.Other */
 | 
			
		||||
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
 | 
			
		||||
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
 | 
			
		||||
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
 | 
			
		||||
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
 | 
			
		||||
.highlight .vc { color: #19177C } /* Name.Variable.Class */
 | 
			
		||||
.highlight .vg { color: #19177C } /* Name.Variable.Global */
 | 
			
		||||
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
 | 
			
		||||
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
 | 
			
		||||
 | 
			
		||||
.highlight pre { overflow: auto; }
 | 
			
		||||
 | 
			
		||||
.highlight .lineno {
 | 
			
		||||
    -webkit-touch-callout: none;
 | 
			
		||||
    -webkit-user-select: none;
 | 
			
		||||
    -khtml-user-select: none;
 | 
			
		||||
    -moz-user-select: none;
 | 
			
		||||
    -ms-user-select: none;
 | 
			
		||||
    user-select: none;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
.highlight .lineno::selection { background: transparent; } /* WebKit/Blink Browsers */
 | 
			
		||||
.highlight .lineno::-moz-selection { background: transparent; } /* Gecko Browsers */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										83
									
								
								searx/static/themes/default/less/code.less
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								searx/static/themes/default/less/code.less
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,83 @@
 | 
			
		|||
.highlight .hll { background-color: #ffffcc }
 | 
			
		||||
.highlight  { background: #f8f8f8; }
 | 
			
		||||
.highlight .c { color: #408080; font-style: italic } /* Comment */
 | 
			
		||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
 | 
			
		||||
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
 | 
			
		||||
.highlight .o { color: #666666 } /* Operator */
 | 
			
		||||
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
 | 
			
		||||
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
 | 
			
		||||
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
 | 
			
		||||
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
 | 
			
		||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
 | 
			
		||||
.highlight .ge { font-style: italic } /* Generic.Emph */
 | 
			
		||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
 | 
			
		||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
 | 
			
		||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
 | 
			
		||||
.highlight .go { color: #888888 } /* Generic.Output */
 | 
			
		||||
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
 | 
			
		||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
 | 
			
		||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
 | 
			
		||||
.highlight .gt { color: #0044DD } /* Generic.Traceback */
 | 
			
		||||
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
 | 
			
		||||
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
 | 
			
		||||
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
 | 
			
		||||
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
 | 
			
		||||
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
 | 
			
		||||
.highlight .kt { color: #B00040 } /* Keyword.Type */
 | 
			
		||||
.highlight .m { color: #666666 } /* Literal.Number */
 | 
			
		||||
.highlight .s { color: #BA2121 } /* Literal.String */
 | 
			
		||||
.highlight .na { color: #7D9029 } /* Name.Attribute */
 | 
			
		||||
.highlight .nb { color: #008000 } /* Name.Builtin */
 | 
			
		||||
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
 | 
			
		||||
.highlight .no { color: #880000 } /* Name.Constant */
 | 
			
		||||
.highlight .nd { color: #AA22FF } /* Name.Decorator */
 | 
			
		||||
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
 | 
			
		||||
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
 | 
			
		||||
.highlight .nf { color: #0000FF } /* Name.Function */
 | 
			
		||||
.highlight .nl { color: #A0A000 } /* Name.Label */
 | 
			
		||||
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
 | 
			
		||||
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
 | 
			
		||||
.highlight .nv { color: #19177C } /* Name.Variable */
 | 
			
		||||
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
 | 
			
		||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
 | 
			
		||||
.highlight .mf { color: #666666 } /* Literal.Number.Float */
 | 
			
		||||
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
 | 
			
		||||
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
 | 
			
		||||
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
 | 
			
		||||
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
 | 
			
		||||
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
 | 
			
		||||
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
 | 
			
		||||
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
 | 
			
		||||
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
 | 
			
		||||
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
 | 
			
		||||
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
 | 
			
		||||
.highlight .sx { color: #008000 } /* Literal.String.Other */
 | 
			
		||||
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
 | 
			
		||||
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
 | 
			
		||||
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
 | 
			
		||||
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
 | 
			
		||||
.highlight .vc { color: #19177C } /* Name.Variable.Class */
 | 
			
		||||
.highlight .vg { color: #19177C } /* Name.Variable.Global */
 | 
			
		||||
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
 | 
			
		||||
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
 | 
			
		||||
 | 
			
		||||
.highlight pre {
 | 
			
		||||
    overflow: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.highlight .lineno {
 | 
			
		||||
    -webkit-touch-callout: none;
 | 
			
		||||
    -webkit-user-select: none;
 | 
			
		||||
    -khtml-user-select: none;
 | 
			
		||||
    -moz-user-select: none;
 | 
			
		||||
    -ms-user-select: none;
 | 
			
		||||
    user-select: none;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
    
 | 
			
		||||
    &::selection {
 | 
			
		||||
        background: transparent; /* WebKit/Blink Browsers */
 | 
			
		||||
    }
 | 
			
		||||
    &::-moz-selection {
 | 
			
		||||
        background: transparent; /* Gecko Browsers */
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -8,6 +8,8 @@
 | 
			
		|||
 | 
			
		||||
@import "mixins.less";
 | 
			
		||||
 | 
			
		||||
@import "code.less";
 | 
			
		||||
 | 
			
		||||
// Main LESS-Code
 | 
			
		||||
 | 
			
		||||
html {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										27
									
								
								searx/static/themes/oscar/css/oscar.min.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								searx/static/themes/oscar/css/oscar.min.css
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,26 +1 @@
 | 
			
		|||
html{position:relative;min-height:100%}
 | 
			
		||||
body{margin-bottom:80px}
 | 
			
		||||
.footer{position:absolute;bottom:0;width:100%;height:60px}
 | 
			
		||||
input[type=checkbox]:checked+.label_hide_if_checked,input[type=checkbox]:checked+.label_hide_if_not_checked+.label_hide_if_checked{display:none}
 | 
			
		||||
input[type=checkbox]:not(:checked)+.label_hide_if_not_checked,input[type=checkbox]:not(:checked)+.label_hide_if_checked+.label_hide_if_not_checked{display:none}
 | 
			
		||||
.result_header{margin-bottom:5px;margin-top:20px}
 | 
			
		||||
.result_header .favicon{margin-bottom:-3px}
 | 
			
		||||
.result_header a{vertical-align:bottom}
 | 
			
		||||
.result_header a .highlight{font-weight:bold}
 | 
			
		||||
.result-content{margin-top:5px}
 | 
			
		||||
.result-content .highlight{font-weight:bold}
 | 
			
		||||
.result-default{clear:both}
 | 
			
		||||
.result-images{float:left !important}
 | 
			
		||||
.img-thumbnail{margin:5px;max-height:128px;min-height:128px}
 | 
			
		||||
.result-videos{clear:both}
 | 
			
		||||
.result-torrents{clear:both}
 | 
			
		||||
.result-map{clear:both}
 | 
			
		||||
.suggestion_item{margin:2px 5px}
 | 
			
		||||
.result_download{margin-right:5px}
 | 
			
		||||
#pagination{margin-top:30px;padding-bottom:50px}
 | 
			
		||||
.infobox .infobox_part{margin-bottom:20px}
 | 
			
		||||
.infobox .infobox_part:last-child{margin-bottom:0}
 | 
			
		||||
.search_categories{margin:10px 0;text-transform:capitalize}
 | 
			
		||||
.cursor-text{cursor:text !important}
 | 
			
		||||
.cursor-pointer{cursor:pointer !important}
 | 
			
		||||
 | 
			
		||||
html{position:relative;min-height:100%}body{margin-bottom:80px}.footer{position:absolute;bottom:0;width:100%;height:60px}input[type=checkbox]:checked~.label_hide_if_checked{display:none}input[type=checkbox]:not(:checked)~.label_hide_if_not_checked{display:none}.result_header{margin-bottom:5px;margin-top:20px}.result_header .favicon{margin-bottom:-3px}.result_header a{vertical-align:bottom}.result_header a .highlight{font-weight:700}.result-content{margin-top:5px}.result-content .highlight{font-weight:700}.result-default{clear:both}.result-images{float:left!important}.img-thumbnail{margin:5px;max-height:128px;min-height:128px}.result-videos{clear:both}.result-torrents{clear:both}.result-map{clear:both}.result-code{clear:both}.suggestion_item{margin:2px 5px}.result_download{margin-right:5px}#pagination{margin-top:30px;padding-bottom:50px}.infobox .infobox_part{margin-bottom:20px}.infobox .infobox_part:last-child{margin-bottom:0}.search_categories{margin:10px 0;text-transform:capitalize}.cursor-text{cursor:text!important}.cursor-pointer{cursor:pointer!important}.highlight .hll{background-color:#ffc}.highlight{background:#f8f8f8}.highlight .c{color:#408080;font-style:italic}.highlight .err{border:1px solid red}.highlight .k{color:green;font-weight:700}.highlight .o{color:#666}.highlight .cm{color:#408080;font-style:italic}.highlight .cp{color:#bc7a00}.highlight .c1{color:#408080;font-style:italic}.highlight .cs{color:#408080;font-style:italic}.highlight .gd{color:#a00000}.highlight .ge{font-style:italic}.highlight .gr{color:red}.highlight .gh{color:navy;font-weight:700}.highlight .gi{color:#00a000}.highlight .go{color:#888}.highlight .gp{color:navy;font-weight:700}.highlight .gs{font-weight:700}.highlight .gu{color:purple;font-weight:700}.highlight .gt{color:#04d}.highlight .kc{color:green;font-weight:700}.highlight .kd{color:green;font-weight:700}.highlight .kn{color:green;font-weight:700}.highlight .kp{color:green}.highlight .kr{color:green;font-weight:700}.highlight .kt{color:#b00040}.highlight .m{color:#666}.highlight .s{color:#ba2121}.highlight .na{color:#7d9029}.highlight .nb{color:green}.highlight .nc{color:#00F;font-weight:700}.highlight .no{color:#800}.highlight .nd{color:#a2f}.highlight .ni{color:#999;font-weight:700}.highlight .ne{color:#D2413A;font-weight:700}.highlight .nf{color:#00f}.highlight .nl{color:#a0a000}.highlight .nn{color:#00F;font-weight:700}.highlight .nt{color:green;font-weight:700}.highlight .nv{color:#19177c}.highlight .ow{color:#A2F;font-weight:700}.highlight .w{color:#bbb}.highlight .mf{color:#666}.highlight .mh{color:#666}.highlight .mi{color:#666}.highlight .mo{color:#666}.highlight .sb{color:#ba2121}.highlight .sc{color:#ba2121}.highlight .sd{color:#BA2121;font-style:italic}.highlight .s2{color:#ba2121}.highlight .se{color:#B62;font-weight:700}.highlight .sh{color:#ba2121}.highlight .si{color:#B68;font-weight:700}.highlight .sx{color:green}.highlight .sr{color:#b68}.highlight .s1{color:#ba2121}.highlight .ss{color:#19177c}.highlight .bp{color:green}.highlight .vc{color:#19177c}.highlight .vg{color:#19177c}.highlight .vi{color:#19177c}.highlight .il{color:#666}.highlight .lineno{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.highlight .lineno::selection{background:0 0}.highlight .lineno::-moz-selection{background:0 0}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,9 +33,43 @@ module.exports = function(grunt) {
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    less: {
 | 
			
		||||
        development: {
 | 
			
		||||
            options: {
 | 
			
		||||
                paths: ["less/oscar"]
 | 
			
		||||
                //banner: '/*! less/oscar/oscar.css | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n'
 | 
			
		||||
            },
 | 
			
		||||
            files: {"css/oscar.css": "less/oscar/oscar.less"}
 | 
			
		||||
        },
 | 
			
		||||
        production: {
 | 
			
		||||
            options: {
 | 
			
		||||
                paths: ["less/oscar"],
 | 
			
		||||
                //banner: '/*! less/oscar/oscar.css | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n',
 | 
			
		||||
                cleancss: true
 | 
			
		||||
            },
 | 
			
		||||
            files: {"css/oscar.min.css": "less/oscar/oscar.less"}
 | 
			
		||||
        },
 | 
			
		||||
        bootstrap: {
 | 
			
		||||
            options: {
 | 
			
		||||
                paths: ["less/bootstrap"],
 | 
			
		||||
                cleancss: true
 | 
			
		||||
            },
 | 
			
		||||
            files: {"css/bootstrap.min.css": "less/bootstrap/bootstrap.less"}
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    watch: {
 | 
			
		||||
      files: ['<%= jshint.files %>'],
 | 
			
		||||
      tasks: ['jshint']
 | 
			
		||||
        scripts: {
 | 
			
		||||
            files: ['<%= jshint.files %>'],
 | 
			
		||||
            tasks: ['jshint', 'concat', 'uglify']
 | 
			
		||||
        },
 | 
			
		||||
        oscar_styles: {
 | 
			
		||||
            files: ['less/oscar/**/*.less'],
 | 
			
		||||
            tasks: ['less:development', 'less:production']
 | 
			
		||||
        },
 | 
			
		||||
        bootstrap_styles: {
 | 
			
		||||
            files: ['less/bootstrap/**/*.less'],
 | 
			
		||||
            tasks: ['less:bootstrap']
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -43,9 +77,12 @@ module.exports = function(grunt) {
 | 
			
		|||
  grunt.loadNpmTasks('grunt-contrib-jshint');
 | 
			
		||||
  grunt.loadNpmTasks('grunt-contrib-watch');
 | 
			
		||||
  grunt.loadNpmTasks('grunt-contrib-concat');
 | 
			
		||||
  grunt.loadNpmTasks('grunt-contrib-less');
 | 
			
		||||
 | 
			
		||||
  grunt.registerTask('test', ['jshint']);
 | 
			
		||||
 | 
			
		||||
  grunt.registerTask('default', ['jshint', 'concat', 'uglify']);
 | 
			
		||||
  grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'less']);
 | 
			
		||||
  
 | 
			
		||||
  grunt.registerTask('styles', ['less']);
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								searx/static/themes/oscar/js/searx.min.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								searx/static/themes/oscar/js/searx.min.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										79
									
								
								searx/static/themes/oscar/less/oscar/code.less
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								searx/static/themes/oscar/less/oscar/code.less
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
.highlight .hll { background-color: #ffffcc }
 | 
			
		||||
.highlight  { background: #f8f8f8; }
 | 
			
		||||
.highlight .c { color: #408080; font-style: italic } /* Comment */
 | 
			
		||||
.highlight .err { border: 1px solid #FF0000 } /* Error */
 | 
			
		||||
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
 | 
			
		||||
.highlight .o { color: #666666 } /* Operator */
 | 
			
		||||
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
 | 
			
		||||
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
 | 
			
		||||
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
 | 
			
		||||
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
 | 
			
		||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
 | 
			
		||||
.highlight .ge { font-style: italic } /* Generic.Emph */
 | 
			
		||||
.highlight .gr { color: #FF0000 } /* Generic.Error */
 | 
			
		||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
 | 
			
		||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
 | 
			
		||||
.highlight .go { color: #888888 } /* Generic.Output */
 | 
			
		||||
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
 | 
			
		||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
 | 
			
		||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
 | 
			
		||||
.highlight .gt { color: #0044DD } /* Generic.Traceback */
 | 
			
		||||
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
 | 
			
		||||
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
 | 
			
		||||
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
 | 
			
		||||
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
 | 
			
		||||
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
 | 
			
		||||
.highlight .kt { color: #B00040 } /* Keyword.Type */
 | 
			
		||||
.highlight .m { color: #666666 } /* Literal.Number */
 | 
			
		||||
.highlight .s { color: #BA2121 } /* Literal.String */
 | 
			
		||||
.highlight .na { color: #7D9029 } /* Name.Attribute */
 | 
			
		||||
.highlight .nb { color: #008000 } /* Name.Builtin */
 | 
			
		||||
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
 | 
			
		||||
.highlight .no { color: #880000 } /* Name.Constant */
 | 
			
		||||
.highlight .nd { color: #AA22FF } /* Name.Decorator */
 | 
			
		||||
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
 | 
			
		||||
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
 | 
			
		||||
.highlight .nf { color: #0000FF } /* Name.Function */
 | 
			
		||||
.highlight .nl { color: #A0A000 } /* Name.Label */
 | 
			
		||||
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
 | 
			
		||||
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
 | 
			
		||||
.highlight .nv { color: #19177C } /* Name.Variable */
 | 
			
		||||
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
 | 
			
		||||
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
 | 
			
		||||
.highlight .mf { color: #666666 } /* Literal.Number.Float */
 | 
			
		||||
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
 | 
			
		||||
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
 | 
			
		||||
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
 | 
			
		||||
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
 | 
			
		||||
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
 | 
			
		||||
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
 | 
			
		||||
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
 | 
			
		||||
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
 | 
			
		||||
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
 | 
			
		||||
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
 | 
			
		||||
.highlight .sx { color: #008000 } /* Literal.String.Other */
 | 
			
		||||
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
 | 
			
		||||
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
 | 
			
		||||
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
 | 
			
		||||
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
 | 
			
		||||
.highlight .vc { color: #19177C } /* Name.Variable.Class */
 | 
			
		||||
.highlight .vg { color: #19177C } /* Name.Variable.Global */
 | 
			
		||||
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
 | 
			
		||||
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
 | 
			
		||||
 | 
			
		||||
.highlight .lineno {
 | 
			
		||||
    -webkit-touch-callout: none;
 | 
			
		||||
    -webkit-user-select: none;
 | 
			
		||||
    -khtml-user-select: none;
 | 
			
		||||
    -moz-user-select: none;
 | 
			
		||||
    -ms-user-select: none;
 | 
			
		||||
    user-select: none;
 | 
			
		||||
    cursor: default;
 | 
			
		||||
    
 | 
			
		||||
    &::selection {
 | 
			
		||||
        background: transparent; /* WebKit/Blink Browsers */
 | 
			
		||||
    }
 | 
			
		||||
    &::-moz-selection {
 | 
			
		||||
        background: transparent; /* Gecko Browsers */
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -9,3 +9,5 @@
 | 
			
		|||
@import "search.less";
 | 
			
		||||
 | 
			
		||||
@import "cursor.less";
 | 
			
		||||
 | 
			
		||||
@import "code.less";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,6 +55,11 @@
 | 
			
		|||
    clear: both;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// code formating of results
 | 
			
		||||
.result-code {
 | 
			
		||||
    clear: both;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// suggestion
 | 
			
		||||
.suggestion_item {
 | 
			
		||||
    margin: 2px 5px;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,8 @@
 | 
			
		|||
        "grunt-contrib-uglify": "~0.6.0",
 | 
			
		||||
        "grunt-contrib-watch" : "~0.6.1",
 | 
			
		||||
        "grunt-contrib-concat" : "~0.5.0",
 | 
			
		||||
        "grunt-contrib-jshint" : "~0.10.0"
 | 
			
		||||
        "grunt-contrib-jshint" : "~0.10.0",
 | 
			
		||||
        "grunt-contrib-less" : "~0.11.0"
 | 
			
		||||
    },
 | 
			
		||||
    
 | 
			
		||||
    "scripts": {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										9
									
								
								searx/templates/courgette/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								searx/templates/courgette/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
<div class="result {{ result.class }}">
 | 
			
		||||
    <h3 class="result_title"> {% if result['favicon'] %}<img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}" />{% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
 | 
			
		||||
    <p class="url">{{ result.pretty_url }} <a class="cache_link" href="https://web.archive.org/web/{{ result.url }}">cached</a></p>
 | 
			
		||||
    {% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
 | 
			
		||||
    <p class="content">{% if result.img_src %}<img src="{{ result.img_src }}" class="image" />{% endif %}{% if result.content %}{{ result.content|safe }}<br class="last"/>{% endif %}</p>
 | 
			
		||||
    {% if result.repository %}<p class="result-content"><a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %}
 | 
			
		||||
 | 
			
		||||
    {{ result.codelines|code_highlighter(result.code_language)|safe }}
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										9
									
								
								searx/templates/default/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								searx/templates/default/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
<div class="result {{ result.class }}">
 | 
			
		||||
    <h3 class="result_title"> {% if result['favicon'] %}<img width="14" height="14" class="favicon" src="static/{{theme}}/img/icon_{{result['favicon']}}.ico" alt="{{result['favicon']}}" />{% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h3>
 | 
			
		||||
    <p class="url">{{ result.pretty_url }} <a class="cache_link" href="https://web.archive.org/web/{{ result.url }}">cached</a></p>
 | 
			
		||||
    {% if result.publishedDate %}<p class="published_date">{{ result.publishedDate }}</p>{% endif %}
 | 
			
		||||
    <p class="content">{% if result.img_src %}<img src="{{ result.img_src }}" class="image" />{% endif %}{% if result.content %}{{ result.content|safe }}<br class="last"/>{% endif %}</p>
 | 
			
		||||
    {% if result.repository %}<p class="result-content"><a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %}
 | 
			
		||||
 | 
			
		||||
    {{ result.codelines|code_highlighter(result.code_language)|safe }}
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,28 @@
 | 
			
		|||
<!-- Draw glyphicon icon from bootstrap-theme -->
 | 
			
		||||
{% macro icon(action) -%}
 | 
			
		||||
    <span class="glyphicon glyphicon-{{ action }}"></span>
 | 
			
		||||
{%- endmacro %}
 | 
			
		||||
 | 
			
		||||
<!-- Draw favicon -->
 | 
			
		||||
<!-- TODO: using url_for methode -->
 | 
			
		||||
{% macro draw_favicon(favicon) -%}
 | 
			
		||||
    <img width="32" height="32" class="favicon" src="static/themes/oscar/img/icons/{{ favicon }}.png" alt="{{ favicon }}" />
 | 
			
		||||
{%- endmacro %}
 | 
			
		||||
 | 
			
		||||
<!-- Draw result header -->
 | 
			
		||||
{% macro result_header(result, favicons) -%} 
 | 
			
		||||
    <h4 class="result_header">{% if result.engine~".png" in favicons %}{{ draw_favicon(result.engine) }} {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
 | 
			
		||||
{%- endmacro %}
 | 
			
		||||
 | 
			
		||||
<!-- Draw result sub header -->
 | 
			
		||||
{% macro result_sub_header(result) -%}
 | 
			
		||||
    {% if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %}
 | 
			
		||||
    <small><a class="text-info" href="https://web.archive.org/web/{{ result.url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
 | 
			
		||||
{%- endmacro %}
 | 
			
		||||
 | 
			
		||||
<!-- Draw result footer -->
 | 
			
		||||
{% macro result_footer(result) -%}
 | 
			
		||||
    <div class="clearfix"></div>
 | 
			
		||||
    <span class="label label-default pull-right">{{ result.engine }}</span>
 | 
			
		||||
    <p class="text-muted">{{ result.pretty_url }}</p>
 | 
			
		||||
{%- endmacro %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								searx/templates/oscar/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								searx/templates/oscar/result_templates/code.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, icon %}
 | 
			
		||||
 | 
			
		||||
{{ result_header(result, favicons) }}
 | 
			
		||||
{{ result_sub_header(result) }}
 | 
			
		||||
 | 
			
		||||
{% if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif %}
 | 
			
		||||
 | 
			
		||||
{% if result.repository %}<p class="result-content">{{ icon('file') }} <a href="{{ result.repository|safe }}">{{ result.repository }}</a></p>{% endif %}
 | 
			
		||||
 | 
			
		||||
{{ result.codelines|code_highlighter(result.code_language)|safe }}
 | 
			
		||||
 | 
			
		||||
{{ result_footer(result) }}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,7 @@
 | 
			
		|||
{% from 'oscar/macros.html' import icon %}
 | 
			
		||||
{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, icon %}
 | 
			
		||||
 | 
			
		||||
<h4 class="result_header">{% if result.engine~".png" in favicons %}<img width="32" height="32" class="favicon" src="{{ url_for('static', filename='img/icons/'+result.engine+'.png') }}" alt="{{ result.engine }}" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
 | 
			
		||||
 | 
			
		||||
{% if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %}
 | 
			
		||||
<small><a class="text-info" href="https://web.archive.org/web/{{ result.url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
 | 
			
		||||
{{ result_header(result, favicons) }}
 | 
			
		||||
{{ result_sub_header(result) }}
 | 
			
		||||
 | 
			
		||||
{% if result.embedded %}
 | 
			
		||||
    <small> • <a class="text-info btn-collapse collapsed cursor-pointer media-loader disabled_if_nojs" data-toggle="collapse" data-target="#result-media-{{ index }}" data-btn-text-collapsed="{{ _('show media') }}" data-btn-text-not-collapsed="{{ _('hide media') }}">{{ icon('music') }} {{ _('show media') }}</a></small>
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +15,4 @@
 | 
			
		|||
 | 
			
		||||
{% if result.content %}<p class="result-content">{{ result.content|safe }}</p>{% endif %}
 | 
			
		||||
 | 
			
		||||
<div class="clearfix"></div>
 | 
			
		||||
 | 
			
		||||
<span class="label label-default pull-right">{{ result.engine }}</span>
 | 
			
		||||
<p class="text-muted">{{ result.pretty_url }}</p>
 | 
			
		||||
{{ result_footer(result) }}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
{% from 'oscar/macros.html' import draw_favicon %}
 | 
			
		||||
 | 
			
		||||
<a href="{{ result.img_src }}" data-toggle="modal" data-target="#modal-{{ index }}">
 | 
			
		||||
    <img src="{{ result.img_src }}" alt="{{ result.title|striptags }}" title="{{ result.title|striptags }}" class="img-thumbnail">
 | 
			
		||||
</a>
 | 
			
		||||
| 
						 | 
				
			
			@ -7,7 +9,7 @@
 | 
			
		|||
        <div class="modal-content">
 | 
			
		||||
            <div class="modal-header">
 | 
			
		||||
                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
 | 
			
		||||
                <h4 class="modal-title">{% if result.engine~".png" in favicons %}<img width="32" height="32" class="favicon" src="static/{{ theme }}/img/icons/{{ result.engine }}.png" alt="{{ result.engine }}" /> {% endif %}{{ result.title|striptags }}</h4>
 | 
			
		||||
                <h4 class="modal-title">{% if result.engine~".png" in favicons %}{{ draw_favicon(result.engine) }} {% endif %}{{ result.title|striptags }}</h4>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="modal-body">
 | 
			
		||||
                <img class="img-responsive center-block" src="{{ result.img_src }}" alt="{{ result.title }}">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,7 @@
 | 
			
		|||
{% from 'oscar/macros.html' import icon %}
 | 
			
		||||
{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, icon %}
 | 
			
		||||
 | 
			
		||||
<h4 class="result_header">{% if result.engine~".png" in favicons %}<img width="32" height="32" class="favicon" src="{{ url_for('static', filename='img/icons/'+result.engine+'.png') }}" alt="{{ result.engine }}" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
 | 
			
		||||
 | 
			
		||||
{% if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %}
 | 
			
		||||
 | 
			
		||||
<small><a class="text-info" href="https://web.archive.org/web/{{ result.pretty_url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
 | 
			
		||||
{{ result_header(result, favicons) }}
 | 
			
		||||
{{ result_sub_header(result) }}
 | 
			
		||||
 | 
			
		||||
{% if (result.latitude and result.longitude) or result.boundingbox %}
 | 
			
		||||
    <small> • <a class="text-info btn-collapse collapsed searx_init_map cursor-pointer disabled_if_nojs" data-toggle="collapse" data-target="#result-map-{{ index }}" data-leaflet-target="osm-map-{{ index }}" data-map-lon="{{ result.longitude }}" data-map-lat="{{ result.latitude }}" {% if result.boundingbox %}data-map-boundingbox='{{ result.boundingbox|tojson|safe }}'{% endif %} {% if result.geojson %}data-map-geojson='{{ result.geojson|tojson|safe }}'{% endif %} data-btn-text-collapsed="{{ _('show map') }}" data-btn-text-not-collapsed="{{ _('hide map') }}">{{ icon('globe') }} {{ _('show map') }}</a></small>
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +65,4 @@
 | 
			
		|||
    </div>
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
<div class="clearfix"></div>
 | 
			
		||||
 | 
			
		||||
<span class="label label-default pull-right">{{ result.engine }}</span>
 | 
			
		||||
<p class="text-muted">{{ result.pretty_url }}</p>
 | 
			
		||||
{{ result_footer(result) }}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,7 @@
 | 
			
		|||
{% from 'oscar/macros.html' import icon %}
 | 
			
		||||
{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, icon %}
 | 
			
		||||
 | 
			
		||||
<h4 class="result_header">{% if result.engine~".png" in favicons %}<img width="32" height="32" class="favicon" src="{{ url_for('static', filename='img/icons/'+result.engine+'.png') }}" alt="{{ result.engine }}" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
 | 
			
		||||
 | 
			
		||||
{% if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %}
 | 
			
		||||
<small><a class="text-info" href="https://web.archive.org/web/{{ result.url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
 | 
			
		||||
{% if result.magnetlink %}<small> • <a href="{{ result.magnetlink }}" class="magnetlink">{{ icon('magnet') }} {{ _('magnet link') }}</a></small>{% endif %}
 | 
			
		||||
{% if result.torrentfile %}<small> • <a href="{{ result.torrentfile }}" class="torrentfile">{{ icon('download-alt') }} {{ _('torrent file') }}</a></small>{% endif %}
 | 
			
		||||
{{ result_header(result, favicons) }}
 | 
			
		||||
{{ result_sub_header(result) }}
 | 
			
		||||
 | 
			
		||||
<p class="result-content">{{ icon('transfer') }} {{ _('Seeder') }} <span class="badge">{{ result.seed }}</span> • {{ _('Leecher') }} <span class="badge">{{ result.leech }}</span>
 | 
			
		||||
{% if result.filesize %}<br />{{ icon('floppy-disk') }} {{ _('Filesize') }} 
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +18,4 @@
 | 
			
		|||
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<div class="clearfix"></div>
 | 
			
		||||
 | 
			
		||||
<span class="label label-default pull-right">{{ result.engine }}</span>
 | 
			
		||||
<p class="text-muted">{{ result.pretty_url }}</p>
 | 
			
		||||
{{ result_footer(result) }}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,7 @@
 | 
			
		|||
{% from 'oscar/macros.html' import icon %}
 | 
			
		||||
{% from 'oscar/macros.html' import result_header, result_sub_header, result_footer, icon %}
 | 
			
		||||
 | 
			
		||||
<h4 class="result_header">{% if result.engine~".png" in favicons %}<img width="32" height="32" class="favicon" src="{{ url_for('static', filename='img/icons/'+result.engine+'.png') }}" alt="{{ result.engine }}" /> {% endif %}<a href="{{ result.url }}">{{ result.title|safe }}</a></h4>
 | 
			
		||||
    
 | 
			
		||||
{% if result.publishedDate %}<time class="text-muted" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time>{% endif %}
 | 
			
		||||
<small><a class="text-info" href="https://web.archive.org/web/{{ result.url }}">{{ icon('link') }} {{ _('cached') }}</a></small>
 | 
			
		||||
{{ result_header(result, favicons) }}
 | 
			
		||||
{{ result_sub_header(result) }}
 | 
			
		||||
 | 
			
		||||
{% if result.embedded %}
 | 
			
		||||
    <small> • <a class="text-info btn-collapse collapsed cursor-pointer media-loader disabled_if_nojs" data-toggle="collapse" data-target="#result-video-{{ index }}" data-btn-text-collapsed="{{ _('show video') }}" data-btn-text-not-collapsed="{{ _('hide video') }}">{{ icon('film') }} {{ _('show video') }}</a></small>
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +20,4 @@
 | 
			
		|||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="clearfix"></div>
 | 
			
		||||
 | 
			
		||||
<span class="label label-default pull-right">{{ result.engine }}</span>
 | 
			
		||||
<p class="text-muted">{{ result.pretty_url }}</p>
 | 
			
		||||
{{ result_footer(result) }}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,14 @@ from searx.search import Search
 | 
			
		|||
from searx.query import Query
 | 
			
		||||
from searx.autocomplete import searx_bang, backends as autocomplete_backends
 | 
			
		||||
from searx import logger
 | 
			
		||||
try:
 | 
			
		||||
    from pygments import highlight
 | 
			
		||||
    from pygments.lexers import get_lexer_by_name
 | 
			
		||||
    from pygments.formatters import HtmlFormatter
 | 
			
		||||
except:
 | 
			
		||||
    logger.critical("cannot import dependency: pygments")
 | 
			
		||||
    from sys import exit
 | 
			
		||||
    exit(1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
logger = logger.getChild('webapp')
 | 
			
		||||
| 
						 | 
				
			
			@ -101,6 +109,55 @@ def get_locale():
 | 
			
		|||
    return locale
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# code-highlighter
 | 
			
		||||
@app.template_filter('code_highlighter')
 | 
			
		||||
def code_highlighter(codelines, language=None):
 | 
			
		||||
    if not language:
 | 
			
		||||
        language = 'text'
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        # find lexer by programing language
 | 
			
		||||
        lexer = get_lexer_by_name(language, stripall=True)
 | 
			
		||||
    except:
 | 
			
		||||
        # if lexer is not found, using default one
 | 
			
		||||
        logger.debug('highlighter cannot find lexer for {0}'.format(language))
 | 
			
		||||
        lexer = get_lexer_by_name('text', stripall=True)
 | 
			
		||||
 | 
			
		||||
    html_code = ''
 | 
			
		||||
    tmp_code = ''
 | 
			
		||||
    last_line = None
 | 
			
		||||
 | 
			
		||||
    # parse lines
 | 
			
		||||
    for line, code in codelines:
 | 
			
		||||
        if not last_line:
 | 
			
		||||
            line_code_start = line
 | 
			
		||||
 | 
			
		||||
        # new codeblock is detected
 | 
			
		||||
        if last_line is not None and\
 | 
			
		||||
           last_line + 1 != line:
 | 
			
		||||
 | 
			
		||||
            # highlight last codepart
 | 
			
		||||
            formatter = HtmlFormatter(linenos='inline',
 | 
			
		||||
                                      linenostart=line_code_start)
 | 
			
		||||
            html_code = html_code + highlight(tmp_code, lexer, formatter)
 | 
			
		||||
 | 
			
		||||
            # reset conditions for next codepart
 | 
			
		||||
            tmp_code = ''
 | 
			
		||||
            line_code_start = line
 | 
			
		||||
 | 
			
		||||
        # add codepart
 | 
			
		||||
        tmp_code += code + '\n'
 | 
			
		||||
 | 
			
		||||
        # update line
 | 
			
		||||
        last_line = line
 | 
			
		||||
 | 
			
		||||
    # highlight last codepart
 | 
			
		||||
    formatter = HtmlFormatter(linenos='inline', linenostart=line_code_start)
 | 
			
		||||
    html_code = html_code + highlight(tmp_code, lexer, formatter)
 | 
			
		||||
 | 
			
		||||
    return html_code
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_base_url():
 | 
			
		||||
    if settings['server']['base_url']:
 | 
			
		||||
        hostname = settings['server']['base_url']
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								setup.py
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								setup.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -44,6 +44,7 @@ setup(
 | 
			
		|||
        'requests',
 | 
			
		||||
        'lxml',
 | 
			
		||||
        'pyyaml',
 | 
			
		||||
        'pygments',
 | 
			
		||||
        'setuptools',
 | 
			
		||||
        'python-dateutil',
 | 
			
		||||
    ],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ Flask = 0.10.1
 | 
			
		|||
Flask-Babel = 0.9
 | 
			
		||||
Jinja2 = 2.7.2
 | 
			
		||||
MarkupSafe = 0.18
 | 
			
		||||
Pygments = 2.0.1
 | 
			
		||||
WebOb = 1.3.1
 | 
			
		||||
WebTest = 2.0.11
 | 
			
		||||
Werkzeug = 0.9.4
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue