Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
searx-engine
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
searx-engine
Commits
12f42d15
Unverified
Commit
12f42d15
authored
Oct 16, 2019
by
Adam Tauber
Committed by
GitHub
Oct 16, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1700 from kvch/intro-offline-engines
Initialize support for offline engines
parents
2946c5f1
5796dc60
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
227 additions
and
61 deletions
+227
-61
__init__.py
searx/engines/__init__.py
+15
-12
soundcloud.py
searx/engines/soundcloud.py
+1
-1
wolframalpha_noapi.py
searx/engines/wolframalpha_noapi.py
+1
-1
https_rewrite.py
searx/plugins/https_rewrite.py
+3
-0
oa_doi_rewrite.py
searx/plugins/oa_doi_rewrite.py
+3
-0
tracker_url_remover.py
searx/plugins/tracker_url_remover.py
+3
-0
results.py
searx/results.py
+45
-29
search.py
searx/search.py
+61
-13
style.css
searx/static/themes/courgette/css/style.css
+1
-1
style.less
searx/static/themes/courgette/less/style.less
+4
-0
style.css
searx/static/themes/legacy/css/style.css
+1
-1
style.less
searx/static/themes/legacy/less/style.less
+4
-0
key-value.html
searx/templates/courgette/result_templates/key-value.html
+13
-0
key-value.html
searx/templates/legacy/result_templates/key-value.html
+13
-0
macros.html
searx/templates/oscar/macros.html
+9
-1
key-value.html
searx/templates/oscar/result_templates/key-value.html
+19
-0
key-value.html
searx/templates/simple/result_templates/key-value.html
+11
-0
utils.py
searx/utils.py
+15
-0
webapp.py
searx/webapp.py
+5
-2
No files found.
searx/engines/__init__.py
View file @
12f42d15
...
...
@@ -27,7 +27,7 @@ from json import loads
from
requests
import
get
from
searx
import
settings
from
searx
import
logger
from
searx.utils
import
load_module
,
match_language
from
searx.utils
import
load_module
,
match_language
,
get_engine_from_settings
logger
=
logger
.
getChild
(
'engines'
)
...
...
@@ -53,7 +53,8 @@ engine_default_args = {'paging': False,
'disabled'
:
False
,
'suspend_end_time'
:
0
,
'continuous_errors'
:
0
,
'time_range_support'
:
False
}
'time_range_support'
:
False
,
'offline'
:
False
}
def
load_engine
(
engine_data
):
...
...
@@ -128,14 +129,16 @@ def load_engine(engine_data):
engine
.
stats
=
{
'result_count'
:
0
,
'search_count'
:
0
,
'page_load_time'
:
0
,
'page_load_count'
:
0
,
'engine_time'
:
0
,
'engine_time_count'
:
0
,
'score_count'
:
0
,
'errors'
:
0
}
if
not
engine
.
offline
:
engine
.
stats
[
'page_load_time'
]
=
0
engine
.
stats
[
'page_load_count'
]
=
0
for
category_name
in
engine
.
categories
:
categories
.
setdefault
(
category_name
,
[])
.
append
(
engine
)
...
...
@@ -173,11 +176,6 @@ def get_engines_stats():
results_num
=
\
engine
.
stats
[
'result_count'
]
/
float
(
engine
.
stats
[
'search_count'
])
if
engine
.
stats
[
'page_load_count'
]
!=
0
:
load_times
=
engine
.
stats
[
'page_load_time'
]
/
float
(
engine
.
stats
[
'page_load_count'
])
# noqa
else
:
load_times
=
0
if
engine
.
stats
[
'engine_time_count'
]
!=
0
:
this_engine_time
=
engine
.
stats
[
'engine_time'
]
/
float
(
engine
.
stats
[
'engine_time_count'
])
# noqa
else
:
...
...
@@ -189,14 +187,19 @@ def get_engines_stats():
else
:
score
=
score_per_result
=
0.0
max_pageload
=
max
(
load_times
,
max_pageload
)
if
not
engine
.
offline
:
load_times
=
0
if
engine
.
stats
[
'page_load_count'
]
!=
0
:
load_times
=
engine
.
stats
[
'page_load_time'
]
/
float
(
engine
.
stats
[
'page_load_count'
])
# noqa
max_pageload
=
max
(
load_times
,
max_pageload
)
pageloads
.
append
({
'avg'
:
load_times
,
'name'
:
engine
.
name
})
max_engine_times
=
max
(
this_engine_time
,
max_engine_times
)
max_results
=
max
(
results_num
,
max_results
)
max_score
=
max
(
score
,
max_score
)
max_score_per_result
=
max
(
score_per_result
,
max_score_per_result
)
max_errors
=
max
(
max_errors
,
engine
.
stats
[
'errors'
])
pageloads
.
append
({
'avg'
:
load_times
,
'name'
:
engine
.
name
})
engine_times
.
append
({
'avg'
:
this_engine_time
,
'name'
:
engine
.
name
})
results
.
append
({
'avg'
:
results_num
,
'name'
:
engine
.
name
})
scores
.
append
({
'avg'
:
score
,
'name'
:
engine
.
name
})
...
...
@@ -255,7 +258,7 @@ def initialize_engines(engine_list):
load_engines
(
engine_list
)
def
engine_init
(
engine_name
,
init_fn
):
init_fn
()
init_fn
(
get_engine_from_settings
(
engine_name
)
)
logger
.
debug
(
'
%
s engine: Initialized'
,
engine_name
)
for
engine_name
,
engine
in
engines
.
items
():
...
...
searx/engines/soundcloud.py
View file @
12f42d15
...
...
@@ -66,7 +66,7 @@ def get_client_id():
return
""
def
init
():
def
init
(
engine_settings
=
None
):
global
guest_client_id
# api-key
guest_client_id
=
get_client_id
()
...
...
searx/engines/wolframalpha_noapi.py
View file @
12f42d15
...
...
@@ -55,7 +55,7 @@ def obtain_token():
return
token
def
init
():
def
init
(
engine_settings
=
None
):
obtain_token
()
...
...
searx/plugins/https_rewrite.py
View file @
12f42d15
...
...
@@ -225,6 +225,9 @@ def https_url_rewrite(result):
def
on_result
(
request
,
search
,
result
):
if
'parsed_url'
not
in
result
:
return
True
if
result
[
'parsed_url'
]
.
scheme
==
'http'
:
https_url_rewrite
(
result
)
return
True
...
...
searx/plugins/oa_doi_rewrite.py
View file @
12f42d15
...
...
@@ -35,6 +35,9 @@ def get_doi_resolver(args, preference_doi_resolver):
def
on_result
(
request
,
search
,
result
):
if
'parsed_url'
not
in
result
:
return
True
doi
=
extract_doi
(
result
[
'parsed_url'
])
if
doi
and
len
(
doi
)
<
50
:
for
suffix
in
(
'/'
,
'.pdf'
,
'/full'
,
'/meta'
,
'/abstract'
):
...
...
searx/plugins/tracker_url_remover.py
View file @
12f42d15
...
...
@@ -30,6 +30,9 @@ preference_section = 'privacy'
def
on_result
(
request
,
search
,
result
):
if
'parsed_url'
not
in
result
:
return
True
query
=
result
[
'parsed_url'
]
.
query
if
query
==
""
:
...
...
searx/results.py
View file @
12f42d15
...
...
@@ -197,6 +197,13 @@ class ResultContainer(object):
self
.
infoboxes
.
append
(
infobox
)
def
_merge_result
(
self
,
result
,
position
):
if
'url'
in
result
:
self
.
__merge_url_result
(
result
,
position
)
return
self
.
__merge_result_no_url
(
result
,
position
)
def
__merge_url_result
(
self
,
result
,
position
):
result
[
'parsed_url'
]
=
urlparse
(
result
[
'url'
])
# if the result has no scheme, use http as default
...
...
@@ -210,51 +217,60 @@ class ResultContainer(object):
if
result
.
get
(
'content'
):
result
[
'content'
]
=
WHITESPACE_REGEX
.
sub
(
' '
,
result
[
'content'
])
# check for duplicates
duplicated
=
False
duplicated
=
self
.
__find_duplicated_http_result
(
result
)
if
duplicated
:
self
.
__merge_duplicated_http_result
(
duplicated
,
result
,
position
)
return
# if there is no duplicate found, append result
result
[
'positions'
]
=
[
position
]
with
RLock
():
self
.
_merged_results
.
append
(
result
)
def
__find_duplicated_http_result
(
self
,
result
):
result_template
=
result
.
get
(
'template'
)
for
merged_result
in
self
.
_merged_results
:
if
'parsed_url'
not
in
merged_result
:
continue
if
compare_urls
(
result
[
'parsed_url'
],
merged_result
[
'parsed_url'
])
\
and
result_template
==
merged_result
.
get
(
'template'
):
if
result_template
!=
'images.html'
:
# not an image, same template, same url : it's a duplicate
duplicated
=
merged_result
break
return
merged_result
else
:
# it's an image
# it's a duplicate if the parsed_url, template and img_src are differents
if
result
.
get
(
'img_src'
,
''
)
==
merged_result
.
get
(
'img_src'
,
''
):
duplicated
=
merged_result
break
return
merged_result
return
None
# merge duplicates together
if
duplicated
:
# using content with more text
if
result_content_len
(
result
.
get
(
'content'
,
''
))
>
\
result_content_len
(
duplicated
.
get
(
'content'
,
''
)):
duplicated
[
'content'
]
=
result
[
'content'
]
def
__merge_duplicated_http_result
(
self
,
duplicated
,
result
,
position
):
# using content with more text
if
result_content_len
(
result
.
get
(
'content'
,
''
))
>
\
result_content_len
(
duplicated
.
get
(
'content'
,
''
)):
duplicated
[
'content'
]
=
result
[
'content'
]
# merge all result's parameters not found in duplicate
for
key
in
result
.
keys
():
if
not
duplicated
.
get
(
key
):
duplicated
[
key
]
=
result
.
get
(
key
)
# merge all result's parameters not found in duplicate
for
key
in
result
.
keys
():
if
not
duplicated
.
get
(
key
):
duplicated
[
key
]
=
result
.
get
(
key
)
# add the new position
duplicated
[
'positions'
]
.
append
(
position
)
# add the new position
duplicated
[
'positions'
]
.
append
(
position
)
# add engine to list of result-engines
duplicated
[
'engines'
]
.
add
(
result
[
'engine'
])
# add engine to list of result-engines
duplicated
[
'engines'
]
.
add
(
result
[
'engine'
])
# using https if possible
if
duplicated
[
'parsed_url'
]
.
scheme
!=
'https'
and
result
[
'parsed_url'
]
.
scheme
==
'https'
:
duplicated
[
'url'
]
=
result
[
'parsed_url'
]
.
geturl
()
duplicated
[
'parsed_url'
]
=
result
[
'parsed_url'
]
# using https if possible
if
duplicated
[
'parsed_url'
]
.
scheme
!=
'https'
and
result
[
'parsed_url'
]
.
scheme
==
'https'
:
duplicated
[
'url'
]
=
result
[
'parsed_url'
]
.
geturl
()
duplicated
[
'parsed_url'
]
=
result
[
'parsed_url'
]
# if there is no duplicate found, append result
else
:
result
[
'positions'
]
=
[
position
]
with
RLock
():
self
.
_merged_results
.
append
(
result
)
def
__merge_result_no_url
(
self
,
result
,
position
):
result
[
'engines'
]
=
set
([
result
[
'engine'
]])
result
[
'positions'
]
=
[
position
]
with
RLock
():
self
.
_merged_results
.
append
(
result
)
def
order_results
(
self
):
for
result
in
self
.
_merged_results
:
...
...
searx/search.py
View file @
12f42d15
...
...
@@ -77,7 +77,7 @@ def send_http_request(engine, request_params):
return
req
(
request_params
[
'url'
],
**
request_args
)
def
search_one_request
(
engine
,
query
,
request_params
):
def
search_one_
http_
request
(
engine
,
query
,
request_params
):
# update request parameters dependent on
# search-engine (contained in engines folder)
engine
.
request
(
query
,
request_params
)
...
...
@@ -97,7 +97,53 @@ def search_one_request(engine, query, request_params):
return
engine
.
response
(
response
)
def
search_one_offline_request
(
engine
,
query
,
request_params
):
return
engine
.
search
(
query
,
request_params
)
def
search_one_request_safe
(
engine_name
,
query
,
request_params
,
result_container
,
start_time
,
timeout_limit
):
if
engines
[
engine_name
]
.
offline
:
return
search_one_offline_request_safe
(
engine_name
,
query
,
request_params
,
result_container
,
start_time
,
timeout_limit
)
# noqa
return
search_one_http_request_safe
(
engine_name
,
query
,
request_params
,
result_container
,
start_time
,
timeout_limit
)
def
search_one_offline_request_safe
(
engine_name
,
query
,
request_params
,
result_container
,
start_time
,
timeout_limit
):
engine
=
engines
[
engine_name
]
try
:
search_results
=
search_one_offline_request
(
engine
,
query
,
request_params
)
if
search_results
:
result_container
.
extend
(
engine_name
,
search_results
)
engine_time
=
time
()
-
start_time
result_container
.
add_timing
(
engine_name
,
engine_time
,
engine_time
)
with
threading
.
RLock
():
engine
.
stats
[
'engine_time'
]
+=
engine_time
engine
.
stats
[
'engine_time_count'
]
+=
1
except
ValueError
as
e
:
record_offline_engine_stats_on_error
(
engine
,
result_container
,
start_time
)
logger
.
exception
(
'engine {0} : invalid input : {1}'
.
format
(
engine_name
,
e
))
except
Exception
as
e
:
record_offline_engine_stats_on_error
(
engine
,
result_container
,
start_time
)
result_container
.
add_unresponsive_engine
((
engine_name
,
u'{0}: {1}'
.
format
(
gettext
(
'unexpected crash'
),
e
),
))
logger
.
exception
(
'engine {0} : exception : {1}'
.
format
(
engine_name
,
e
))
def
record_offline_engine_stats_on_error
(
engine
,
result_container
,
start_time
):
engine_time
=
time
()
-
start_time
result_container
.
add_timing
(
engine
.
name
,
engine_time
,
engine_time
)
with
threading
.
RLock
():
engine
.
stats
[
'errors'
]
+=
1
def
search_one_http_request_safe
(
engine_name
,
query
,
request_params
,
result_container
,
start_time
,
timeout_limit
):
# set timeout for all HTTP requests
requests_lib
.
set_timeout_for_thread
(
timeout_limit
,
start_time
=
start_time
)
# reset the HTTP total time
...
...
@@ -111,7 +157,7 @@ def search_one_request_safe(engine_name, query, request_params, result_container
try
:
# send requests and parse the results
search_results
=
search_one_request
(
engine
,
query
,
request_params
)
search_results
=
search_one_
http_
request
(
engine
,
query
,
request_params
)
# check if the engine accepted the request
if
search_results
is
not
None
:
...
...
@@ -427,19 +473,21 @@ class Search(object):
continue
# set default request parameters
request_params
=
default_request_params
()
request_params
[
'headers'
][
'User-Agent'
]
=
user_agent
request_params
[
'category'
]
=
selected_engine
[
'category'
]
request_params
[
'pageno'
]
=
search_query
.
pageno
request_params
=
{}
if
not
engine
.
offline
:
request_params
=
default_request_params
()
request_params
[
'headers'
][
'User-Agent'
]
=
user_agent
if
hasattr
(
engine
,
'language'
)
and
engine
.
language
:
request_params
[
'language'
]
=
engine
.
language
else
:
request_params
[
'language'
]
=
search_query
.
lang
if
hasattr
(
engine
,
'language'
)
and
engine
.
language
:
request_params
[
'language'
]
=
engine
.
language
else
:
request_params
[
'language'
]
=
search_query
.
lang
# 0 = None, 1 = Moderate, 2 = Strict
request_params
[
'safesearch'
]
=
search_query
.
safesearch
request_params
[
'time_range'
]
=
search_query
.
time_range
request_params
[
'safesearch'
]
=
search_query
.
safesearch
request_params
[
'time_range'
]
=
search_query
.
time_range
request_params
[
'category'
]
=
selected_engine
[
'category'
]
request_params
[
'pageno'
]
=
search_query
.
pageno
# append request to list
requests
.
append
((
selected_engine
[
'name'
],
search_query
.
query
,
request_params
))
...
...
searx/static/themes/courgette/css/style.css
View file @
12f42d15
a
,
h2
{
color
:
#666
}
.center
,
html
{
position
:
relative
}
#categories_container
>
div
,
.top_margin
a
{
display
:
inline-block
}
#categories
,
.center
{
text-align
:
center
}
#categories
.hidden
,
.cache_link
,
.highlight
.c
,
.highlight
.cm
,
.highlight
.ge
,
.highlight
.sd
{
font-style
:
italic
}
*
{
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
input
[
type
=
search
]
{
-webkit-appearance
:
textfield
}
h2
{
text-transform
:
uppercase
}
body
{
font-family
:
sans-serif
;
line-height
:
1.5
;
margin
:
0
;
background
:
#EEE
}
html
{
min-height
:
100%
}
.title
h1
{
font-size
:
7em
;
color
:
#3498DB
;
margin
:
-20px
auto
0
;
line-height
:
100px
;
padding-bottom
:
20px
}
.center
{
max-width
:
70em
;
background
:
rgba
(
255
,
255
,
255
,
.6
);
padding
:
2em
;
margin
:
7%
auto
0
}
.center.search
{
position
:
static
;
width
:
auto
;
background
:
0
0
;
margin
:
auto
;
padding-top
:
1.8em
}
@media
screen
and
(
min-width
:
1001px
){
.center
:after
{
content
:
""
;
z-index
:
-1
;
background
:
url(../img/bg-body-index.jpg)
no-repeat
;
background-size
:
cover
;
width
:
100%
;
height
:
100%
;
top
:
0
;
left
:
0
;
position
:
fixed
}
.center.search
:after
{
content
:
none
}}
.autocompleter-choices
{
position
:
absolute
;
margin
:
0
;
padding
:
0
;
background
:
#FFF
}
.autocompleter-choices
li
{
padding
:
.5em
1em
}
.autocompleter-choices
li
:hover
{
background
:
#3498DB
;
color
:
#FFF
;
cursor
:
pointer
}
.top_margin
{
position
:
absolute
;
bottom
:
-3.5em
;
width
:
100%
;
left
:
0
}
.top_margin
a
{
margin-right
:
1em
;
color
:
#FFF
;
text-decoration
:
none
}
.top_margin
a
:focus
,
.top_margin
a
:hover
{
text-decoration
:
underline
}
@media
screen
and
(
max-width
:
1000px
){
.center
{
background
:
0
0
}
.top_margin
a
{
color
:
#333
}}
.checkbox_container
{
margin-top
:
1.5em
}
.checkbox_container
label
{
padding
:
.5em
1em
;
color
:
#333
;
cursor
:
pointer
;
font-size
:
.9em
}
.checkbox_container
input
[
type
=
checkbox
]
:checked
+
label
,
.checkbox_container
label
:hover
{
background
:
#3498DB
;
color
:
#FFF
}
.checkbox_container
input
[
type
=
checkbox
]
{
position
:
absolute
;
top
:
-9999px
}
#categories
.hidden
{
display
:
none
;
position
:
absolute
;
bottom
:
1em
;
left
:
0
;
text-align
:
center
;
width
:
100%
;
font-size
:
.9em
;
color
:
#333
}
#categories
:hover
.hidden
,
.right
a
{
display
:
block
}
@media
screen
and
(
max-width
:
900px
){
#categories_container
{
letter-spacing
:
-5px
}
#categories_container
>
div
{
letter-spacing
:
normal
;
margin-top
:
1em
}
.checkbox_container
{
margin
:
0
}
.checkbox_container
label
{
display
:
block
;
background
:
#CCC
;
padding
:
1em
;
border
:
1px
solid
#FFF
}
.top_margin
{
position
:
static
}
#categories
.hidden
{
position
:
static
;
display
:
block
}}
@media
screen
and
(
max-width
:
900px
)
and
(
min-width
:
501px
){
#categories_container
>
div
{
width
:
31%
;
margin-left
:
2.333%
}
#categories_container
>
div
:nth-child
(
3n
+
1
)
{
margin-left
:
0
}}
@media
screen
and
(
max-width
:
500px
){
#categories_container
>
div
{
width
:
48%
;
margin-left
:
2%
;
font-size
:
.9em
}
#categories_container
>
div
:nth-child
(
2n
+
1
)
{
margin-left
:
0
}
.title
h1
{
background
:
url(../img/searx-mobile.png)
no-repeat
;
width
:
200px
;
height
:
39px
}}
#search_wrapper
{
position
:
relative
}
.q
{
padding
:
.5em
3em
.5em
1em
;
width
:
100%
;
font-size
:
1.5em
;
border
:
0
;
color
:
#666
}
.cache_link
,
.result
p
{
font-size
:
.9em
}
#search_submit
{
position
:
absolute
;
top
:
0
;
right
:
0
;
border
:
0
;
background
:
url(../img/search-icon.png)
center
center
/
65%
auto
no-repeat
#3498DB
;
text-indent
:
-9999px
;
width
:
5em
;
height
:
100%
;
cursor
:
pointer
}
#sidebar
,
.right
{
position
:
fixed
;
width
:
15em
;
right
:
0
;
text-align
:
right
}
#search_submit
:focus
,
#search_submit
:hover
{
background-color
:
#0665A2
}
#sidebar
{
background
:
#3498DB
;
top
:
0
;
height
:
100%
;
padding
:
1.5em
}
.right
{
bottom
:
1.5em
;
z-index
:
1
;
padding
:
0
1.5em
}
.right
a
{
color
:
#FFF
;
text-decoration
:
none
}
#sidebar
form
,
#suggestions
form
,
.row
fieldset
{
display
:
inline-block
}
.right
a
:focus
,
.right
a
:hover
{
text-decoration
:
underline
}
#preferences
{
background
:
url(../img/preference-icon.png)
right
center
/
12%
auto
no-repeat
;
padding-right
:
1.8em
}
#search_url
input
{
border
:
0
;
padding
:
.5em
}
#sidebar
>
div
{
margin-bottom
:
1em
;
color
:
#FFF
}
#sidebar
input
[
type
=
submit
]
{
background
:
#CCC
;
border
:
0
;
padding
:
.5em
1em
;
cursor
:
pointer
;
margin-top
:
.5em
}
#sidebar
input
[
type
=
submit
]
:focus
,
#sidebar
input
[
type
=
submit
]
:hover
{
color
:
#FFF
;
background-color
:
#0665A2
}
#results
{
padding
:
0
17em
0
2em
}
.result
.content
{
margin
:
0
;
color
:
#666
}
.result
.url
{
margin-top
:
0
;
color
:
#FF6530
}
.result
.favicon
{
float
:
left
;
position
:
relative
;
top
:
.5em
;
margin-right
:
.5em
}
.definition_result
{
background
:
#CCC
;
padding
:
1em
}
.definition_result
.result_title
,
.definition_result
p
{
margin
:
0
}
.result_title
{
margin-bottom
:
0
;
font-weight
:
400
}
.result_title
a
{
color
:
#3498DB
;
text-decoration
:
none
}
#answers
,
#suggestions
span
{
color
:
#666
}
.result_title
a
:focus
,
.result_title
a
:hover
{
text-decoration
:
underline
}
.cache_link
{
color
:
#666
}
.search.center
{
padding-right
:
17em
}
#answers
{
border
:
2px
solid
#3498DB
;
padding
:
20px
;
text-align
:
center
;
max-width
:
70em
;
margin
:
0
auto
20px
}
#suggestions
{
margin-bottom
:
1em
}
#suggestions
form
{
vertical-align
:
top
;
margin-bottom
:
.5em
}
#suggestions
input
[
type
=
submit
]
{
color
:
#333
;
padding
:
.5em
1em
;
border
:
0
;
background
:
#CCC
;
cursor
:
pointer
}
#suggestions
input
[
type
=
submit
]
:focus
,
#suggestions
input
[
type
=
submit
]
:hover
{
background
:
#3498DB
;
color
:
#FFF
}
#pagination
{
margin
:
1.5em
0
2em
}
#pagination
form
+
form
{
float
:
right
;
margin-top
:
-2em
}
input
[
type
=
submit
]
{
display
:
inline-block
;
background
:
#3498DB
;
color
:
#FFF
;
border
:
0
;
padding
:
.6em
1em
;
cursor
:
pointer
}
input
[
type
=
submit
]
:focus
,
input
[
type
=
submit
]
:hover
{
background
:
#0665A2
}
.row
{
max-width
:
60em
;
margin
:
auto
}
.row
a
{
color
:
#3498DB
}
.row
form
{
letter-spacing
:
-5px
}
.row
form
>*
{
letter-spacing
:
normal
}
.row
p
{
margin
:
0
}
.row
fieldset
{
width
:
48%
;
vertical-align
:
top
}
.row
fieldset
:last-of-type
{
display
:
block
;
width
:
auto
;
background
:
0
0
;
padding
:
0
}
fieldset
,
table
tr
:nth-child
(
odd
)
{
background
:
#CCC
}
.row
fieldset
:nth-child
(
odd
)
{
margin-right
:
2%
}
.row
fieldset
:nth-child
(
2
)
{
min-height
:
10.5em
}
@media
screen
and
(
max-width
:
900px
){
.row
{
margin
:
0
1em
}
.row
fieldset
{
width
:
49%
}
.row
fieldset
,
.row
fieldset
:nth-child
(
odd
)
{
margin-right
:
0
}
.row
fieldset
:first-child
{
width
:
100%
;
margin-right
:
0
}
.row
fieldset
:nth-child
(
even
)
{
margin-right
:
2%
}}
@media
screen
and
(
max-width
:
800px
){
.row
fieldset
,
select
{
width
:
100%
}
table
{
font-size
:
.8em
}
#sidebar
,
.right
{
display
:
none
}
#results
{
padding
:
0
2em
}
.search.center
{
padding-right
:
2em
}}
@media
screen
and
(
max-width
:
400px
){
.row
#categories_container
>
div
{
width
:
100%
;
margin-left
:
0
}}
fieldset
{
border
:
0
;
margin
:
1em
0
;
padding
:
1.5em
}
table
{
width
:
100%
;
text-align
:
left
;
border
:
1px
solid
#CCC
;
border-collapse
:
collapse
}
table
th
{
background
:
#999
;
color
:
#FFF
}
table
td
,
table
th
{
padding
:
.5em
1em
;
border
:
1px
solid
#FFF
}
.engine_checkbox
label
{
padding
:
.5em
;
background
:
#3498DB
;
color
:
#FFF
;
cursor
:
pointer
}
.engine_checkbox
.deny
{
background
:
#3498DB
}
.engine_checkbox
.allow
{
display
:
none
;
background
:
#666
}
.engine_checkbox
input
{
display
:
none
}
.engine_checkbox
input
:checked
+
.allow
{
display
:
inline
}
.engine_checkbox
input
:checked
+
.allow
+
.deny
{
display
:
none
}
.row
input
[
type
=
submit
]
{
font-size
:
1em
;
margin
:
1em
0
2em
}
.row
.right
{
position
:
static
;
display
:
inline-block
}
.row
.right
a
{
color
:
#333
;
width
:
auto
;
text-align
:
left
;
padding
:
0
}
.small_font
{
font-size
:
.8em
}
table
th
{
padding
:
1em
}
legend
{
background
:
#EEE
;
padding
:
0
1em
;
position
:
relative
}
select
{
border
:
1px
solid
#DDD
;
padding
:
.5em
.8em
;
font-size
:
1em
}
.highlight
.hll
{
background-color
:
#ffc
}
.highlight
{
font-weight
:
700
;
background
:
#f8f8f8
}
.highlight
.c
{
color
:
#408080
}
.highlight
.err
{
border
:
1px
solid
red
}
.highlight
.k
{
color
:
green
;
font-weight
:
700
}
.highlight
.o
{
color
:
#666
}
.highlight
.cm
{
color
:
#408080
}
.highlight
.cp
{
color
:
#BC7A00
}
.highlight
.c1
,
.highlight
.cs
{
color
:
#408080
;
font-style
:
italic
}
.highlight
.gd
{
color
:
#A00000
}
.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
,
.highlight
.kd
,
.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
,
.highlight
.mh
,
.highlight
.mi
,
.highlight
.mo
{
color
:
#666
}
.highlight
.s2
,
.highlight
.sb
,
.highlight
.sc
{
color
:
#BA2121
}
.highlight
.sd
{
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
,
.highlight
.vg
,
.highlight
.vi
{
color
:
#19177C
}
.highlight
.il
{
color
:
#666
}
.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
:
0
0
}
.highlight
.lineno
::-moz-selection
{
background
:
0
0
}
\ No newline at end of file
a
,
h2
{
color
:
#666
}
.center
,
html
{
position
:
relative
}
#categories_container
>
div
,
.top_margin
a
{
display
:
inline-block
}
#categories
,
.center
{
text-align
:
center
}
#categories
.hidden
,
.cache_link
,
.highlight
.c
,
.highlight
.cm
,
.highlight
.ge
,
.highlight
.sd
{
font-style
:
italic
}
*
{
-webkit-box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
box-sizing
:
border-box
}
input
[
type
=
search
]
{
-webkit-appearance
:
textfield
}
h2
{
text-transform
:
uppercase
}
body
{
font-family
:
sans-serif
;
line-height
:
1.5
;
margin
:
0
;
background
:
#EEE
}
html
{
min-height
:
100%
}
.title
h1
{
font-size
:
7em
;
color
:
#3498DB
;
margin
:
-20px
auto
0
;
line-height
:
100px
;
padding-bottom
:
20px
}
.center
{
max-width
:
70em
;
background
:
rgba
(
255
,
255
,
255
,
.6
);
padding
:
2em
;
margin
:
7%
auto
0
}
.center.search
{
position
:
static
;
width
:
auto
;
background
:
0
0
;
margin
:
auto
;
padding-top
:
1.8em
}
@media
screen
and
(
min-width
:
1001px
){
.center
:after
{
content
:
""
;
z-index
:
-1
;
background
:
url(../img/bg-body-index.jpg)
no-repeat
;
background-size
:
cover
;
width
:
100%
;
height
:
100%
;
top
:
0
;
left
:
0
;
position
:
fixed
}
.center.search
:after
{
content
:
none
}}
.autocompleter-choices
{
position
:
absolute
;
margin
:
0
;
padding
:
0
;
background
:
#FFF
}
.autocompleter-choices
li
{
padding
:
.5em
1em
}
.autocompleter-choices
li
:hover
{
background
:
#3498DB
;
color
:
#FFF
;
cursor
:
pointer
}
.top_margin
{
position
:
absolute
;
bottom
:
-3.5em
;
width
:
100%
;
left
:
0
}
.top_margin
a
{
margin-right
:
1em
;
color
:
#FFF
;
text-decoration
:
none
}
.top_margin
a
:focus
,
.top_margin
a
:hover
{
text-decoration
:
underline
}
@media
screen
and
(
max-width
:
1000px
){
.center
{
background
:
0
0
}
.top_margin
a
{
color
:
#333
}}
.checkbox_container
{
margin-top
:
1.5em
}
.checkbox_container
label
{
padding
:
.5em
1em
;
color
:
#333
;
cursor
:
pointer
;
font-size
:
.9em
}
.checkbox_container
input
[
type
=
checkbox
]
:checked
+
label
,
.checkbox_container
label
:hover
{
background
:
#3498DB
;
color
:
#FFF
}
.checkbox_container
input
[
type
=
checkbox
]
{
position
:
absolute
;
top
:
-9999px
}
#categories
.hidden
{
display
:
none
;
position
:
absolute
;
bottom
:
1em
;
left
:
0
;
text-align
:
center
;
width
:
100%
;
font-size
:
.9em
;
color
:
#333
}
#categories
:hover
.hidden
,
.right
a
{
display
:
block
}
@media
screen
and
(
max-width
:
900px
){
#categories_container
{
letter-spacing
:
-5px
}
#categories_container
>
div
{
letter-spacing
:
normal
;
margin-top
:
1em
}
.checkbox_container
{
margin
:
0
}
.checkbox_container
label
{
display
:
block
;
background
:
#CCC
;
padding
:
1em
;
border
:
1px
solid
#FFF
}
.top_margin
{
position
:
static
}
#categories
.hidden
{
position
:
static
;
display
:
block
}}
@media
screen
and
(
max-width
:
900px
)
and
(
min-width
:
501px
){
#categories_container
>
div
{
width
:
31%
;
margin-left
:
2.333%
}
#categories_container
>
div
:nth-child
(
3n
+
1
)
{
margin-left
:
0
}}
@media
screen
and
(
max-width
:
500px
){
#categories_container
>
div
{
width
:
48%
;
margin-left
:
2%
;
font-size
:
.9em
}
#categories_container
>
div
:nth-child
(
2n
+
1
)
{
margin-left
:
0
}
.title
h1
{
background
:
url(../img/searx-mobile.png)
no-repeat
;
width
:
200px
;
height
:
39px
}}
#search_wrapper
{
position
:
relative
}
.q
{
padding
:
.5em
3em
.5em
1em
;
width
:
100%
;
font-size
:
1.5em
;
border
:
0
;
color
:
#666
}
.cache_link
,
.result
p
{
font-size
:
.9em
}
#search_submit
{
position
:
absolute
;
top
:
0
;
right
:
0
;
border
:
0
;
background
:
url(../img/search-icon.png)
center
center
/
65%
auto
no-repeat
#3498DB
;
text-indent
:
-9999px
;
width
:
5em
;
height
:
100%
;
cursor
:
pointer
}
#sidebar
,
.right
{
position
:
fixed
;
width
:
15em
;
right
:
0
;
text-align
:
right
}
#search_submit
:focus
,
#search_submit
:hover
{
background-color
:
#0665A2
}
#sidebar
{
background
:
#3498DB
;
top
:
0
;
height
:
100%
;
padding
:
1.5em
}
.right
{
bottom
:
1.5em
;
z-index
:
1
;
padding
:
0
1.5em
}
.right
a
{
color
:
#FFF
;
text-decoration
:
none
}
#sidebar
form
,
#suggestions
form
,
.row
fieldset
{
display
:
inline-block
}
.right
a
:focus
,
.right
a
:hover
{
text-decoration
:
underline
}
#preferences
{
background
:
url(../img/preference-icon.png)
right
center
/
12%
auto
no-repeat
;
padding-right
:
1.8em
}
#search_url
input
{
border
:
0
;
padding
:
.5em
}
#sidebar
>
div
{
margin-bottom
:
1em
;
color
:
#FFF
}
#sidebar
input
[
type
=
submit
]
{
background
:
#CCC
;
border
:
0
;
padding
:
.5em
1em
;
cursor
:
pointer
;
margin-top
:
.5em
}
#sidebar
input
[
type
=
submit
]
:focus
,
#sidebar
input
[
type
=
submit
]
:hover
{
color
:
#FFF
;
background-color
:
#0665A2
}
#results
{
padding
:
0
17em
0
2em
}
.result
.engines
{
text-align
:
right
}
.result
.content
{
margin
:
0
;
color
:
#666
}
.result
.url
{
margin-top
:
0
;
color
:
#FF6530
}
.result
.favicon
{
float
:
left
;
position
:
relative
;
top
:
.5em
;
margin-right
:
.5em
}
.definition_result
{
background
:
#CCC
;
padding
:
1em
}
.definition_result
.result_title
,
.definition_result
p
{
margin
:
0
}
.result_title
{
margin-bottom
:
0
;
font-weight
:
400
}
.result_title
a
{
color
:
#3498DB
;
text-decoration
:
none
}
#answers
,
#suggestions
span
{
color
:
#666
}
.result_title
a
:focus
,
.result_title
a
:hover
{
text-decoration
:
underline
}
.cache_link
{
color
:
#666
}
.search.center
{
padding-right
:
17em
}
#answers
{
border
:
2px
solid
#3498DB
;
padding
:
20px
;
text-align
:
center
;
max-width
:
70em
;
margin
:
0
auto
20px
}
#suggestions
{
margin-bottom
:
1em
}
#suggestions
form
{
vertical-align
:
top
;
margin-bottom
:
.5em
}
#suggestions
input
[
type
=
submit
]
{
color
:
#333
;
padding
:
.5em
1em
;
border
:
0
;
background
:
#CCC
;
cursor
:
pointer
}
#suggestions
input
[
type
=
submit
]
:focus
,
#suggestions
input
[
type
=
submit
]
:hover
{
background
:
#3498DB
;
color
:
#FFF
}
#pagination
{
margin
:
1.5em
0
2em
}
#pagination
form
+
form
{
float
:
right
;
margin-top
:
-2em
}
input
[
type
=
submit
]
{
display
:
inline-block
;
background
:
#3498DB
;
color
:
#FFF
;
border
:
0
;
padding
:
.6em
1em
;
cursor
:
pointer
}
input
[
type
=
submit
]
:focus
,
input
[
type
=
submit
]
:hover
{
background
:
#0665A2
}
.row
{
max-width
:
60em
;
margin
:
auto
}
.row
a
{
color
:
#3498DB
}
.row
form
{
letter-spacing
:
-5px
}
.row
form
>*
{
letter-spacing
:
normal
}
.row
p
{
margin
:
0
}
.row
fieldset
{
width
:
48%
;
vertical-align
:
top
}
.row
fieldset
:last-of-type
{
display
:
block
;
width
:
auto
;
background
:
0
0
;
padding
:
0
}
fieldset
,
table
tr
:nth-child
(
odd
)
{
background
:
#CCC
}
.row
fieldset
:nth-child
(
odd
)
{
margin-right
:
2%
}
.row
fieldset
:nth-child
(
2
)
{
min-height
:
10.5em
}
@media
screen
and
(
max-width
:
900px
){
.row
{
margin
:
0
1em
}
.row
fieldset
{
width
:
49%
}
.row
fieldset
,
.row
fieldset
:nth-child
(
odd
)
{
margin-right
:
0
}
.row
fieldset
:first-child
{
width
:
100%
;
margin-right
:
0
}
.row
fieldset
:nth-child
(
even
)
{
margin-right
:
2%
}}
@media
screen
and
(
max-width
:
800px
){
.row
fieldset
,
select
{
width
:
100%
}
table
{
font-size
:
.8em
}
#sidebar
,
.right
{
display
:
none
}
#results
{
padding
:
0
2em
}
.search.center
{
padding-right
:
2em
}}
@media
screen
and
(
max-width
:
400px
){
.row
#categories_container
>
div
{
width
:
100%
;
margin-left
:
0
}}
fieldset
{
border
:
0
;
margin
:
1em
0
;
padding
:
1.5em
}
table
{
width
:
100%
;
text-align
:
left
;
border
:
1px
solid
#CCC
;
border-collapse
:
collapse
}
table
th
{
background
:
#999
;
color
:
#FFF
}
table
td
,
table
th
{
padding
:
.5em
1em
;
border
:
1px
solid
#FFF
}
.engine_checkbox
label
{
padding
:
.5em
;
background
:
#3498DB
;
color
:
#FFF
;
cursor
:
pointer
}
.engine_checkbox
.deny
{
background
:
#3498DB
}
.engine_checkbox
.allow
{
display
:
none
;
background
:
#666
}
.engine_checkbox
input
{
display
:
none
}
.engine_checkbox
input
:checked
+
.allow
{
display
:
inline
}
.engine_checkbox
input
:checked
+
.allow
+
.deny
{
display
:
none
}
.row
input
[
type
=
submit
]
{
font-size
:
1em
;
margin
:
1em
0
2em
}
.row
.right
{
position
:
static
;
display
:
inline-block
}
.row
.right
a
{
color
:
#333
;
width
:
auto
;
text-align
:
left
;
padding
:
0
}
.small_font
{
font-size
:
.8em
}
table
th
{
padding
:
1em
}
legend
{
background
:
#EEE
;
padding
:
0
1em
;
position
:
relative
}
select
{
border
:
1px
solid
#DDD
;
padding
:
.5em
.8em
;
font-size
:
1em
}
.highlight
.hll
{
background-color
:
#ffc
}
.highlight
{
font-weight
:
700
;
background
:
#f8f8f8
}
.highlight
.c
{
color
:
#408080
}
.highlight
.err
{
border
:
1px
solid
red
}
.highlight
.k
{
color
:
green
;
font-weight
:
700
}
.highlight
.o
{
color
:
#666
}
.highlight
.cm
{
color
:
#408080
}
.highlight
.cp
{
color
:
#BC7A00
}
.highlight
.c1
,
.highlight
.cs
{
color
:
#408080
;
font-style
:
italic
}
.highlight
.gd
{
color
:
#A00000
}
.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
,
.highlight
.kd
,
.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
,
.highlight
.mh
,
.highlight
.mi
,
.highlight
.mo
{
color
:
#666
}
.highlight
.s2
,
.highlight
.sb
,
.highlight
.sc
{
color
:
#BA2121
}
.highlight
.sd
{
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
,
.highlight
.vg
,
.highlight
.vi
{
color
:
#19177C
}
.highlight
.il
{
color
:
#666
}
.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
:
0
0
}
.highlight
.lineno
::-moz-selection
{
background
:
0
0
}
\ No newline at end of file
searx/static/themes/courgette/less/style.less
View file @
12f42d15
...
...
@@ -325,6 +325,10 @@ a {
font-size: 0.9em;
}
.result .engines {
text-align: right;
}
.result .content {
margin: 0;
color: #666;
...
...
searx/static/themes/legacy/css/style.css
View file @
12f42d15
.highlight
.c
,
.highlight
.cm
,
.highlight
.ge
,
.highlight
.sd
{
font-style
:
italic
}
#categories
,
.highlight
.lineno
{
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
}
#container
,
.search
,
body
,
html
{
padding
:
0
;
margin
:
0
}
div
.title
h1
,
input
[
type
=
checkbox
]
{
visibility
:
hidden
}
#categories
,
.checkbox_container
label
,
.engine_checkbox
label
,
.highlight
.lineno
{
-webkit-touch-callout
:
none
;
-khtml-user-select
:
none
}
#answers
input
[
type
=
submit
],
#infoboxes
input
[
type
=
submit
],
#sidebar
input
[
type
=
submit
],
#suggestions
input
[
type
=
submit
],
.result_title
a
:hover
,
.torrent_result
a
:hover
{
text-decoration
:
underline
}
#infoboxes
,
.result
.content
,
.result
.url
,
.result
h3
{
word-wrap
:
break-word
}
#apis
,
#infoboxes
.infobox
br
,
#pagination
,
#pagination
br
,
.result
,
.result
.content
br
.last
{
clear
:
both
}
.highlight
.hll
{
background-color
:
#ffc
}
.highlight
{
background
:
#f8f8f8
}
.highlight
.c
{
color
:
#408080
}
.highlight
.err
{
border
:
1px
solid
red
}
.highlight
.k
{
color
:
green
;
font-weight
:
700
}
.highlight
.o
{
color
:
#666
}
.highlight
.cm
{
color
:
#408080
}
.highlight
.cp
{
color
:
#BC7A00
}
.highlight
.c1
,
.highlight
.cs
{
color
:
#408080
;
font-style
:
italic
}
.highlight
.gd
{
color
:
#A00000
}
.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
,
.highlight
.kd
,
.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
,
.highlight
.mh
,
.highlight
.mi
,
.highlight
.mo
{
color
:
#666
}
.highlight
.s2
,
.highlight
.sb
,
.highlight
.sc
{
color
:
#BA2121
}
.highlight
.sd
{
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
,
.highlight
.vg
,
.highlight
.vi
{
color
:
#19177C
}
.highlight
.il
{
color
:
#666
}
.highlight
pre
{
overflow
:
auto
}
.highlight
.lineno
{
user-select
:
none
;
cursor
:
default
}
.highlight
.lineno
::selection
{
background
:
0
0
}
.highlight
.lineno
::-moz-selection
{
background
:
0
0
}
html
{
font-family
:
sans-serif
;
font-size
:
.9em
;
-webkit-text-size-adjust
:
100%
;
-ms-text-size-adjust
:
100%
;
-moz-text-size-adjust
:
100%
;
text-size-adjust
:
100%
;
color
:
#444
}
#container
{
width
:
100%
;
position
:
absolute
;
top
:
0
}
.search
.checkbox_container
label
{
font-size
:
.9em
;
border-bottom
:
2px
solid
#E8E7E6
}
.search
.checkbox_container
label
:hover
{
border-bottom
:
2px
solid
#3498DB
}
.search
.checkbox_container
input
[
type
=
checkbox
]
:checked
+
label
{
border-bottom
:
2px
solid
#2980B9
}
#search_wrapper
{
position
:
relative
;
width
:
50em
;
padding
:
10px
}
.center
#search_wrapper
{
margin-left
:
auto
;
margin-right
:
auto
}
.q
,
ul
.autocompleter-choices
{
margin
:
0
;
border
:
1px
solid
#3498DB
}
.q
{
background
:
#FFF
;
color
:
#222
;
font-size
:
16px
;
height
:
28px
;
outline
:
0
;
padding
:
2px
2px
2px
8px
;
padding-right
:
0
!important
;
width
:
100%
;
z-index
:
2
}
#search_submit
{
position
:
absolute
;
top
:
13px
;
right
:
1px
;
padding
:
0
;
border
:
0
;
background
:
url(../img/search-icon.png)
no-repeat
;
background-size
:
24px
24px
;
opacity
:
.8
;
width
:
24px
;
height
:
30px
;
font-size
:
0
}
@media
screen
and
(
max-width
:
50em
){
#search_wrapper
{
width
:
90%
;
clear
:
both
;
overflow
:
hidden
}}
ul
.autocompleter-choices
{
position
:
absolute
;
padding
:
0
;
list-style
:
none
;
border-left-color
:
#3498DB
;
border-right-color
:
#3498DB
;
border-bottom-color
:
#3498DB
;
text-align
:
left
;
font-family
:
Verdana
,
Geneva
,
Arial
,
Helvetica
,
sans-serif
;
z-index
:
50
;
background-color
:
#FFF
;
color
:
#444
}
ul
.autocompleter-choices
li
{
position
:
relative
;
margin
:
-2px
0
0
;
padding
:
.2em
1.5em
.2em
1em
;
display
:
block
;
float
:
none
!important
;
cursor
:
pointer
;
font-weight
:
400
;
white-space
:
nowrap
;
font-size
:
1em
;
line-height
:
1.5em
}
ul
.autocompleter-choices
li
.autocompleter-selected
{
background-color
:
#444
;
color
:
#FFF
}
ul
.autocompleter-choices
li
.autocompleter-selected
span
.autocompleter-queried
{
color
:
#9FCFFF
}
ul
.autocompleter-choices
span
.autocompleter-queried
{
display
:
inline
;
float
:
none
;
font-weight
:
700
;
margin
:
0
;
padding
:
0
}
.row
{
max-width
:
800px
;
margin
:
20px
auto
;
text-align
:
justify
}
.row
h1
{
font-size
:
3em
;
margin-top
:
50px
}
.row
p
{
padding
:
0
10px
;
max-width
:
700px
}
.row
h3
,
.row
ul
{
margin
:
4px
8px
}
.hmarg
{
margin
:
0
20px
;
border
:
1px
solid
#3498DB
;
padding
:
4px
10px
}
a
:active
.hmarg
,
a
:hover
.hmarg
,
a
:link
.hmarg
,
a
:visited
.hmarg
{
color
:
#3498DB
}
.top_margin
{
margin-top
:
60px
}
.center
{
text-align
:
center
}
h1
{
font-size
:
5em
}
div
.title
{
background
:
url(../img/searx.png)
center
no-repeat
;
width
:
100%
;
min-height
:
80px
}
input
[
type
=
submit
]
{
padding
:
2px
6px
;
margin
:
2px
4px
;
display
:
inline-block
;
background
:
#3498DB
;
color
:
#FFF
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
border
:
0
;
cursor
:
pointer
}
fieldset
{
margin
:
8px
;
border
:
1px
solid
#3498DB
}
#categories
{
margin
:
0
10px
;
user-select
:
none
}
.checkbox_container
{
display
:
inline-block
;
position
:
relative
;
margin
:
0
3px
;
padding
:
0
}
.checkbox_container
input
{
display
:
none
}
.checkbox_container
label
,
.engine_checkbox
label
{
cursor
:
pointer
;
padding
:
4px
10px
;
margin
:
0
;
display
:
block
;
text-transform
:
capitalize
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
user-select
:
none
}
.checkbox_container
input
[
type
=
checkbox
]
:checked
+
label
{
background
:
#3498DB
;
color
:
#FFF
}
.engine_checkbox
{
padding
:
4px
}
label
.allow
{
background
:
#E74C3C
;
padding
:
4px
8px
;
color
:
#FFF
;
display
:
none
}
label
.deny
{
background
:
#2ECC71
;
padding
:
4px
8px
;
color
:
#444
;
display
:
inline
}
.engine_checkbox
input
[
type
=
checkbox
]
:checked
+
label
:nth-child
(
2
)+
label
{
display
:
none
}
.engine_checkbox
input
[
type
=
checkbox
]
:checked
+
label
.allow
{
display
:
inline
}
a
{
text-decoration
:
none
;
color
:
#1a11be
}
a
:visited
{
color
:
#8E44AD
}
.result
{
margin
:
19px
0
18px
;
padding
:
0
}
.result_title
{
margin-bottom
:
0
}
.result_title
a
{
color
:
#2980B9
;
font-weight
:
400
;
font-size
:
1.1em
}
.result_title
a
:visited
{
color
:
#8E44AD
}
.cache_link
{
font-size
:
10px
!important
}
.result
h3
{
font-size
:
1em
;
margin
:
5px
0
1px
;
padding
:
0
}
.result
.content
,
.result
.url
,
.small_font
{
font-size
:
.8em
}
.result
.content
{
margin
:
0
;
padding
:
0
;
max-width
:
54em
;
line-height
:
1.24
}
.result
.content
img
{
float
:
left
;
margin-right
:
5px
;
max-width
:
200px
;
max-height
:
100px
}
.result
.url
{
margin
:
0
0
3px
;
padding
:
0
;
max-width
:
54em
;
color
:
#C0392B
}
.result
.published_date
{
font-size
:
.8em
;
color
:
#888
;
Margin
:
5px
20px
}
.result
.thumbnail
{
width
:
400px
}
.engines
{
color
:
#888
}
.small
p
{
margin
:
2px
0
}
.right
{
float
:
right
}
.invisible
{
display
:
none
}
.left
{
float
:
left
}
.highlight
{
color
:
#094089
}
.content
.highlight
{
color
:
#000
}
.image_result
{
display
:
inline-block
;
margin
:
10px
;
position
:
relative
;
max-height
:
160px
}
.image_result
img
{
border
:
0
;
max-height
:
160px
}
.image_result
p
{
margin
:
0
;
padding
:
0
}
.image_result
p
span
a
{
display
:
none
;
color
:
#FFF
}
.image_result
p
:hover
span
a
{
display
:
block
;
position
:
absolute
;
bottom
:
0
;
right
:
0
;
padding
:
4px
;
background-color
:
rgba
(
0
,
0
,
0
,
.6
);
font-size
:
.7em
}
#categories_container
,
.percentage
{
position
:
relative
}
.torrent_result
{
border-left
:
10px
solid
#d3d3d3
;
padding-left
:
3px
}
.torrent_result
p
{
margin
:
3px
;
font-size
:
.8em
}
.torrent_result
a
{
color
:
#2980B9
}
.torrent_result
a
:visited
{
color
:
#8E44AD
}
.definition_result
{
border-left
:
10px
solid
gray
;
padding-left
:
3px
}
#infoboxes
,
#sidebar
{
margin
:
0
2px
5px
5px
;
padding
:
0
2px
2px
}
.percentage
{
width
:
300px
}
.percentage
div
{
background
:
#444
}
table
{
width
:
100%
}
td
{
padding
:
0
4px
}
tr
:hover
{
background
:
#DDD
}
#results
{
margin
:
auto
auto
20px
;
padding
:
0
;
width
:
50em
}
#sidebar
{
position
:
fixed
;
bottom
:
10px
;
left
:
10px
;
width
:
14em
}
#answers
input
,
#infoboxes
input
,
#sidebar
input
,
#suggestions
input
{
padding
:
0
;
margin
:
3px
;
font-size
:
.8em
;
display
:
inline-block
;
background
:
0
0
;
color
:
#444
;
cursor
:
pointer
}
#suggestions
form
{
display
:
inline
}
#answers
,
#suggestions
{
margin-top
:
20px
;
max-width
:
45em
}
#suggestions-title
{
color
:
#888
}
#answers
{
border
:
2px
solid
#2980B9
;
padding
:
20px
}
#answers
form
,
#infoboxes
form
{
min-width
:
210px
}
#infoboxes
{
position
:
absolute
;
top
:
100px
;
right
:
20px
;
max-width
:
21em
}
#infoboxes
.infobox
{
margin
:
10px
0
;
border
:
1px
solid
#ddd
;
padding
:
5px
;
font-size
:
.8em
}
#infoboxes
.infobox
img
{
max-width
:
90%
;
max-heigt
:
12em
;
display
:
block
;
margin
:
5px
;
padding
:
5px
}
#infoboxes
.infobox
h2
{
margin
:
0
}
#apis
,
#search_url
{
margin-top
:
8px
}
#infoboxes
.infobox
table
{
table-layout
:
fixed
}
#infoboxes
.infobox
table
td
{
vertical-align
:
top
}
#infoboxes
.infobox
input
{
font-size
:
1em
}
#search_url
input
{
border
:
1px
solid
#888
;
padding
:
4px
;
color
:
#444
;
width
:
14em
;
display
:
block
;
margin
:
4px
;
font-size
:
.8em
}
#preferences
{
top
:
10px
;
padding
:
0
;
border
:
0
;
background
:
url(../img/preference-icon.png)
no-repeat
;
background-size
:
28px
28px
;
opacity
:
.8
;
width
:
28px
;
height
:
30px
;
display
:
block
}
#preferences
*
{
display
:
none
}
@media
screen
and
(
max-width
:
50em
){
#results
{
margin
:
auto
;
padding
:
0
;
width
:
90%
}
.github
{
display
:
none
}
.checkbox_container
{
display
:
block
;
width
:
90%
}
.checkbox_container
label
{
border-bottom
:
0
}
.preferences_container
{
display
:
none
;
postion
:
fixed
!important
;
top
:
100px
;
right
:
0
}}
@media
screen
and
(
max-width
:
75em
){
div
.title
h1
{
font-size
:
1em
}
html
.touch
#categories
{
width
:
95%
;
height
:
30px
;
text-align
:
left
;
overflow-x
:
scroll
;
overflow-y
:
hidden
;
-webkit-overflow-scrolling
:
touch
}
html
.touch
#categories
#categories_container
{
width
:
1000px
;
width
:
-moz-max-content
;
width
:
-webkit-max-content
;
width
:
max-content
}
html
.touch
#categories
#categories_container
.checkbox_container
{
display
:
inline-block
;
width
:
auto
}
#answers
,
#suggestions
{
margin-top
:
5px
}
#infoboxes
{
position
:
inherit
;
max-width
:
inherit
}
#infoboxes
.infobox
{
clear
:
both
}
#infoboxes
.infobox
img
{
float
:
left
;
max-width
:
10em
}
#categories
{
font-size
:
90%
;
clear
:
both
}
#categories
.checkbox_container
{
margin
:
auto
}
#sidebar
{
position
:
static
;
max-width
:
50em
;
margin
:
0
0
2px
;
padding
:
0
;
float
:
none
;
border
:
none
;
width
:
auto
}
#sidebar
input
{
border
:
0
}
#apis
,
#search_url
{
display
:
none
}
.result
{
border-top
:
1px
solid
#E8E7E6
;
margin
:
8px
0
}
.image_result
,
.image_result
img
,
.result
.thumbnail
{
max-width
:
98%
}}
.favicon
{
float
:
left
;
margin-right
:
4px
;
margin-top
:
2px
}
.preferences_back
{
background
:
#3498DB
;
border
:
0
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
cursor
:
pointer
;
display
:
inline-block
;
margin
:
2px
4px
;
padding
:
4px
6px
}
.preferences_back
a
{
color
:
#FFF
}
.hidden
{
opacity
:
0
;
overflow
:
hidden
;
font-size
:
.8em
;
position
:
absolute
;
bottom
:
-20px
;
width
:
100%
;
text-position
:
center
;
background
:
#fff
;
transition
:
opacity
1s
ease
}
#categories_container
:hover
.hidden
{
transition
:
opacity
1s
ease
;
opacity
:
.8
}
\ No newline at end of file
.highlight
.c
,
.highlight
.cm
,
.highlight
.ge
,
.highlight
.sd
{
font-style
:
italic
}
#categories
,
.highlight
.lineno
{
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
}
#container
,
.search
,
body
,
html
{
padding
:
0
;
margin
:
0
}
div
.title
h1
,
input
[
type
=
checkbox
]
{
visibility
:
hidden
}
#categories
,
.checkbox_container
label
,
.engine_checkbox
label
,
.highlight
.lineno
{
-webkit-touch-callout
:
none
;
-khtml-user-select
:
none
}
#answers
input
[
type
=
submit
],
#infoboxes
input
[
type
=
submit
],
#sidebar
input
[
type
=
submit
],
#suggestions
input
[
type
=
submit
],
.result_title
a
:hover
,
.torrent_result
a
:hover
{
text-decoration
:
underline
}
#infoboxes
,
.result
.content
,
.result
.url
,
.result
h3
{
word-wrap
:
break-word
}
#apis
,
#infoboxes
.infobox
br
,
#pagination
,
#pagination
br
,
.result
,
.result
.content
br
.last
{
clear
:
both
}
.highlight
.hll
{
background-color
:
#ffc
}
.highlight
{
background
:
#f8f8f8
}
.highlight
.c
{
color
:
#408080
}
.highlight
.err
{
border
:
1px
solid
red
}
.highlight
.k
{
color
:
green
;
font-weight
:
700
}
.highlight
.o
{
color
:
#666
}
.highlight
.cm
{
color
:
#408080
}
.highlight
.cp
{
color
:
#BC7A00
}
.highlight
.c1
,
.highlight
.cs
{
color
:
#408080
;
font-style
:
italic
}
.highlight
.gd
{
color
:
#A00000
}
.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
,
.highlight
.kd
,
.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
,
.highlight
.mh
,
.highlight
.mi
,
.highlight
.mo
{
color
:
#666
}
.highlight
.s2
,
.highlight
.sb
,
.highlight
.sc
{
color
:
#BA2121
}
.highlight
.sd
{
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
,
.highlight
.vg
,
.highlight
.vi
{
color
:
#19177C
}
.highlight
.il
{
color
:
#666
}
.highlight
pre
{
overflow
:
auto
}
.highlight
.lineno
{
user-select
:
none
;
cursor
:
default
}
.highlight
.lineno
::selection
{
background
:
0
0
}
.highlight
.lineno
::-moz-selection
{
background
:
0
0
}
html
{
font-family
:
sans-serif
;
font-size
:
.9em
;
-webkit-text-size-adjust
:
100%
;
-ms-text-size-adjust
:
100%
;
-moz-text-size-adjust
:
100%
;
text-size-adjust
:
100%
;
color
:
#444
}
#container
{
width
:
100%
;
position
:
absolute
;
top
:
0
}
.search
.checkbox_container
label
{
font-size
:
.9em
;
border-bottom
:
2px
solid
#E8E7E6
}
.search
.checkbox_container
label
:hover
{
border-bottom
:
2px
solid
#3498DB
}
.search
.checkbox_container
input
[
type
=
checkbox
]
:checked
+
label
{
border-bottom
:
2px
solid
#2980B9
}
#search_wrapper
{
position
:
relative
;
width
:
50em
;
padding
:
10px
}
.center
#search_wrapper
{
margin-left
:
auto
;
margin-right
:
auto
}
.q
,
ul
.autocompleter-choices
{
margin
:
0
;
border
:
1px
solid
#3498DB
}
.q
{
background
:
#FFF
;
color
:
#222
;
font-size
:
16px
;
height
:
28px
;
outline
:
0
;
padding
:
2px
2px
2px
8px
;
padding-right
:
0
!important
;
width
:
100%
;
z-index
:
2
}
#search_submit
{
position
:
absolute
;
top
:
13px
;
right
:
1px
;
padding
:
0
;
border
:
0
;
background
:
url(../img/search-icon.png)
no-repeat
;
background-size
:
24px
24px
;
opacity
:
.8
;
width
:
24px
;
height
:
30px
;
font-size
:
0
}
@media
screen
and
(
max-width
:
50em
){
#search_wrapper
{
width
:
90%
;
clear
:
both
;
overflow
:
hidden
}}
ul
.autocompleter-choices
{
position
:
absolute
;
padding
:
0
;
list-style
:
none
;
border-left-color
:
#3498DB
;
border-right-color
:
#3498DB
;
border-bottom-color
:
#3498DB
;
text-align
:
left
;
font-family
:
Verdana
,
Geneva
,
Arial
,
Helvetica
,
sans-serif
;
z-index
:
50
;
background-color
:
#FFF
;
color
:
#444
}
ul
.autocompleter-choices
li
{
position
:
relative
;
margin
:
-2px
0
0
;
padding
:
.2em
1.5em
.2em
1em
;
display
:
block
;
float
:
none
!important
;
cursor
:
pointer
;
font-weight
:
400
;
white-space
:
nowrap
;
font-size
:
1em
;
line-height
:
1.5em
}
ul
.autocompleter-choices
li
.autocompleter-selected
{
background-color
:
#444
;
color
:
#FFF
}
ul
.autocompleter-choices
li
.autocompleter-selected
span
.autocompleter-queried
{
color
:
#9FCFFF
}
ul
.autocompleter-choices
span
.autocompleter-queried
{
display
:
inline
;
float
:
none
;
font-weight
:
700
;
margin
:
0
;
padding
:
0
}
.row
{
max-width
:
800px
;
margin
:
20px
auto
;
text-align
:
justify
}
.row
h1
{
font-size
:
3em
;
margin-top
:
50px
}
.row
p
{
padding
:
0
10px
;
max-width
:
700px
}
.row
h3
,
.row
ul
{
margin
:
4px
8px
}
.hmarg
{
margin
:
0
20px
;
border
:
1px
solid
#3498DB
;
padding
:
4px
10px
}
a
:active
.hmarg
,
a
:hover
.hmarg
,
a
:link
.hmarg
,
a
:visited
.hmarg
{
color
:
#3498DB
}
.top_margin
{
margin-top
:
60px
}
.center
{
text-align
:
center
}
h1
{
font-size
:
5em
}
div
.title
{
background
:
url(../img/searx.png)
center
no-repeat
;
width
:
100%
;
min-height
:
80px
}
input
[
type
=
submit
]
{
padding
:
2px
6px
;
margin
:
2px
4px
;
display
:
inline-block
;
background
:
#3498DB
;
color
:
#FFF
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
border
:
0
;
cursor
:
pointer
}
fieldset
{
margin
:
8px
;
border
:
1px
solid
#3498DB
}
#categories
{
margin
:
0
10px
;
user-select
:
none
}
.checkbox_container
{
display
:
inline-block
;
position
:
relative
;
margin
:
0
3px
;
padding
:
0
}
.checkbox_container
input
{
display
:
none
}
.checkbox_container
label
,
.engine_checkbox
label
{
cursor
:
pointer
;
padding
:
4px
10px
;
margin
:
0
;
display
:
block
;
text-transform
:
capitalize
;
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
user-select
:
none
}
.checkbox_container
input
[
type
=
checkbox
]
:checked
+
label
{
background
:
#3498DB
;
color
:
#FFF
}
.engine_checkbox
{
padding
:
4px
}
label
.allow
{
background
:
#E74C3C
;
padding
:
4px
8px
;
color
:
#FFF
;
display
:
none
}
label
.deny
{
background
:
#2ECC71
;
padding
:
4px
8px
;
color
:
#444
;
display
:
inline
}
.engine_checkbox
input
[
type
=
checkbox
]
:checked
+
label
:nth-child
(
2
)+
label
{
display
:
none
}
.engine_checkbox
input
[
type
=
checkbox
]
:checked
+
label
.allow
{
display
:
inline
}
a
{
text-decoration
:
none
;
color
:
#1a11be
}
a
:visited
{
color
:
#8E44AD
}
.result
{
margin
:
19px
0
18px
;
padding
:
0
}
.result_title
{
margin-bottom
:
0
}
.result_title
a
{
color
:
#2980B9
;
font-weight
:
400
;
font-size
:
1.1em
}
.result_title
a
:visited
{
color
:
#8E44AD
}
.cache_link
{
font-size
:
10px
!important
}
.result
h3
{
font-size
:
1em
;
margin
:
5px
0
1px
;
padding
:
0
}
.result
.content
,
.result
.url
,
.small_font
{
font-size
:
.8em
}
.result
.content
{
margin
:
0
;
padding
:
0
;
max-width
:
54em
;
line-height
:
1.24
}
.result
.content
img
{
float
:
left
;
margin-right
:
5px
;
max-width
:
200px
;
max-height
:
100px
}
.result
.url
{
margin
:
0
0
3px
;
padding
:
0
;
max-width
:
54em
;
color
:
#C0392B
}
.result
.published_date
{
font-size
:
.8em
;
color
:
#888
;
Margin
:
5px
20px
}
.result
.thumbnail
{
width
:
400px
}
.engines
{
color
:
#888
}
.small
p
{
margin
:
2px
0
}
.right
{
float
:
right
}
.invisible
{
display
:
none
}
.left
{
float
:
left
}
.highlight
{
color
:
#094089
}
.content
.highlight
{
color
:
#000
}
.image_result
{
display
:
inline-block
;
margin
:
10px
;
position
:
relative
;
max-height
:
160px
}
.image_result
img
{
border
:
0
;
max-height
:
160px
}
.image_result
p
{
margin
:
0
;
padding
:
0
}
.image_result
p
span
a
{
display
:
none
;
color
:
#FFF
}
.image_result
p
:hover
span
a
{
display
:
block
;
position
:
absolute
;
bottom
:
0
;
right
:
0
;
padding
:
4px
;
background-color
:
rgba
(
0
,
0
,
0
,
.6
);
font-size
:
.7em
}
#categories_container
,
.percentage
{
position
:
relative
}
.torrent_result
{
border-left
:
10px
solid
#d3d3d3
;
padding-left
:
3px
}
.torrent_result
p
{
margin
:
3px
;
font-size
:
.8em
}
.torrent_result
a
{
color
:
#2980B9
}
.torrent_result
a
:visited
{
color
:
#8E44AD
}
.definition_result
{
border-left
:
10px
solid
gray
;
padding-left
:
3px
}
.percentage
{
width
:
300px
}
.percentage
div
{
background
:
#444
}
table
{
width
:
100%
}
.result-table
{
margin-bottom
:
10px
}
#infoboxes
,
#sidebar
{
margin
:
0
2px
5px
5px
;
padding
:
0
2px
2px
}
td
{
padding
:
0
4px
}
tr
:hover
{
background
:
#DDD
}
#results
{
margin
:
auto
auto
20px
;
padding
:
0
;
width
:
50em
}
#sidebar
{
position
:
fixed
;
bottom
:
10px
;
left
:
10px
;
width
:
14em
}
#answers
input
,
#infoboxes
input
,
#sidebar
input
,
#suggestions
input
{
padding
:
0
;
margin
:
3px
;
font-size
:
.8em
;
display
:
inline-block
;
background
:
0
0
;
color
:
#444
;
cursor
:
pointer
}
#suggestions
form
{
display
:
inline
}
#answers
,
#suggestions
{
margin-top
:
20px
;
max-width
:
45em
}
#suggestions-title
{
color
:
#888
}
#answers
{
border
:
2px
solid
#2980B9
;
padding
:
20px
}
#answers
form
,
#infoboxes
form
{
min-width
:
210px
}
#infoboxes
{
position
:
absolute
;
top
:
100px
;
right
:
20px
;
max-width
:
21em
}
#infoboxes
.infobox
{
margin
:
10px
0
;
border
:
1px
solid
#ddd
;
padding
:
5px
;
font-size
:
.8em
}
#infoboxes
.infobox
img
{
max-width
:
90%
;
max-heigt
:
12em
;
display
:
block
;
margin
:
5px
;
padding
:
5px
}
#infoboxes
.infobox
h2
{
margin
:
0
}
#apis
,
#search_url
{
margin-top
:
8px
}
#infoboxes
.infobox
table
{
table-layout
:
fixed
}
#infoboxes
.infobox
table
td
{
vertical-align
:
top
}
#infoboxes
.infobox
input
{
font-size
:
1em
}
#search_url
input
{
border
:
1px
solid
#888
;
padding
:
4px
;
color
:
#444
;
width
:
14em
;
display
:
block
;
margin
:
4px
;
font-size
:
.8em
}
#preferences
{
top
:
10px
;
padding
:
0
;
border
:
0
;
background
:
url(../img/preference-icon.png)
no-repeat
;
background-size
:
28px
28px
;
opacity
:
.8
;
width
:
28px
;
height
:
30px
;
display
:
block
}
#preferences
*
{
display
:
none
}
@media
screen
and
(
max-width
:
50em
){
#results
{
margin
:
auto
;
padding
:
0
;
width
:
90%
}
.github
{
display
:
none
}
.checkbox_container
{
display
:
block
;
width
:
90%
}
.checkbox_container
label
{
border-bottom
:
0
}
.preferences_container
{
display
:
none
;
postion
:
fixed
!important
;
top
:
100px
;
right
:
0
}}
@media
screen
and
(
max-width
:
75em
){
div
.title
h1
{
font-size
:
1em
}
html
.touch
#categories
{
width
:
95%
;
height
:
30px
;
text-align
:
left
;
overflow-x
:
scroll
;
overflow-y
:
hidden
;
-webkit-overflow-scrolling
:
touch
}
html
.touch
#categories
#categories_container
{
width
:
1000px
;
width
:
-moz-max-content
;
width
:
-webkit-max-content
;
width
:
max-content
}
html
.touch
#categories
#categories_container
.checkbox_container
{
display
:
inline-block
;
width
:
auto
}
#answers
,
#suggestions
{
margin-top
:
5px
}
#infoboxes
{
position
:
inherit
;
max-width
:
inherit
}
#infoboxes
.infobox
{
clear
:
both
}
#infoboxes
.infobox
img
{
float
:
left
;
max-width
:
10em
}
#categories
{
font-size
:
90%
;
clear
:
both
}
#categories
.checkbox_container
{
margin
:
auto
}
#sidebar
{
position
:
static
;
max-width
:
50em
;
margin
:
0
0
2px
;
padding
:
0
;
float
:
none
;
border
:
none
;
width
:
auto
}
#sidebar
input
{
border
:
0
}
#apis
,
#search_url
{
display
:
none
}
.result
{
border-top
:
1px
solid
#E8E7E6
;
margin
:
8px
0
}
.image_result
,
.image_result
img
,
.result
.thumbnail
{
max-width
:
98%
}}
.favicon
{
float
:
left
;
margin-right
:
4px
;
margin-top
:
2px
}
.preferences_back
{
background
:
#3498DB
;
border
:
0
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
cursor
:
pointer
;
display
:
inline-block
;
margin
:
2px
4px
;
padding
:
4px
6px
}
.preferences_back
a
{
color
:
#FFF
}
.hidden
{
opacity
:
0
;
overflow
:
hidden
;
font-size
:
.8em
;
position
:
absolute
;
bottom
:
-20px
;
width
:
100%
;
text-position
:
center
;
background
:
#fff
;
transition
:
opacity
1s
ease
}
#categories_container
:hover
.hidden
{
transition
:
opacity
1s
ease
;
opacity
:
.8
}
\ No newline at end of file
searx/static/themes/legacy/less/style.less
View file @
12f42d15
...
...
@@ -376,6 +376,10 @@ table {
width: 100%;
}
.result-table {
margin-bottom: 10px;
}
td {
padding: 0 4px;
}
...
...
searx/templates/courgette/result_templates/key-value.html
0 → 100644
View file @
12f42d15
<div
class=
"result"
>
<table>
{% for key, value in result.items() %}
{% if key in ['engine', 'engines', 'template', 'score', 'category', 'positions'] %}
{% continue %}
{% endif %}
<tr>
<td><b>
{{ key|upper }}
</b>
: {{ value|safe }}
</td>
</tr>
{% endfor %}
</table>
<p
class=
"engines"
>
{{ result.engines|join(', ') }}
</p>
</div>
searx/templates/legacy/result_templates/key-value.html
0 → 100644
View file @
12f42d15
<table
class=
"result-table"
>
{% for key, value in result.items() %}
{% if key in ['engine', 'engines', 'template', 'score', 'category', 'positions'] %}
{% continue %}
{% endif %}
<tr>
<td><b>
{{ key|upper }}
</b>
: {{ value|safe }}
</td>
</tr>
{% endfor %}
<tr>
<td><b>
ENGINES
</b>
: {{ result.engines|join(', ') }}
</td>
</tr>
</table>
searx/templates/oscar/macros.html
View file @
12f42d15
...
...
@@ -14,7 +14,7 @@
<!-- Draw result header -->
{% macro result_header(result, favicons) -%}
<h4
class=
"result_header"
>
{% if result.engine~".png" in favicons %}{{ draw_favicon(result.engine) }} {% endif %}{
{ result_link(result.url, result.title|safe) }
}
</h4>
<h4
class=
"result_header"
>
{% if result.engine~".png" in favicons %}{{ draw_favicon(result.engine) }} {% endif %}{
% if result.url %}{{ result_link(result.url, result.title|safe) }}{% else %}{{ result.title|safe}}{% endif %
}
</h4>
{%- endmacro %}
<!-- Draw result sub header -->
...
...
@@ -31,12 +31,16 @@
{% for engine in result.engines %}
<span
class=
"label label-default"
>
{{ engine }}
</span>
{% endfor %}
{% if result.url %}
<small>
{{ result_link("https://web.archive.org/web/" + result.url, icon('link') + _('cached'), "text-info") }}
</small>
{% endif %}
{% if proxify %}
<small>
{{ result_link(proxify(result.url), icon('sort') + _('proxied'), "text-info") }}
</small>
{% endif %}
</div>
{% if result.pretty_url %}
<div
class=
"external-link"
>
{{ result.pretty_url }}
</div>
{% endif %}
{%- endmacro %}
<!-- Draw result footer -->
...
...
@@ -45,11 +49,15 @@
{% for engine in result.engines %}
<span
class=
"label label-default"
>
{{ engine }}
</span>
{% endfor %}
{% if result.url %}
<small>
{{ result_link("https://web.archive.org/web/" + result.url, icon('link') + _('cached'), "text-info") }}
</small>
{% endif %}
{% if proxify %}
<small>
{{ result_link(proxify(result.url), icon('sort') + _('proxied'), "text-info") }}
</small>
{% endif %}
{% if result.pretty_url %}
<div
class=
"external-link"
>
{{ result.pretty_url }}
</div>
{% endif %}
{%- endmacro %}
{% macro preferences_item_header(info, label, rtl) -%}
...
...
searx/templates/oscar/result_templates/key-value.html
0 → 100644
View file @
12f42d15
{% from 'oscar/macros.html' import result_footer, result_footer_rtl with context %}
<div
class=
"panel panel-default"
>
<table
class=
"table table-responsive table-bordered table-condensed"
>
{% for key, value in result.items() %}
{% if key in ['engine', 'engines', 'template', 'score', 'category', 'positions'] %}
{% continue %}
{% endif %}
<tr>
<td><b>
{{ key|upper }}
</b>
: {{ value }}
</td>
</tr>
{% endfor %}
</table>
{% if rtl %}
{{ result_footer_rtl(result) }}
{% else %}
{{ result_footer(result) }}
{% endif %}
</div>
searx/templates/simple/result_templates/key-value.html
0 → 100644
View file @
12f42d15
<table>
{% for key, value in result.items() %}
{% if key in ['engine', 'engines', 'template', 'score', 'category', 'positions'] %}
{% continue %}
{% endif %}
<tr>
<td><b>
{{ key|upper }}
</b>
: {{ value }}
</td>
</tr>
{% endfor %}
</table>
<div
class=
"engines"
>
{% for engine in result.engines %}
<span>
{{ engine }}
</span>
{% endfor %}
</div>
{{- '' -}}
searx/utils.py
View file @
12f42d15
...
...
@@ -435,3 +435,18 @@ def ecma_unescape(s):
# "%20" becomes " ", "%F3" becomes "ó"
s
=
ecma_unescape2_re
.
sub
(
lambda
e
:
unichr
(
int
(
e
.
group
(
1
),
16
)),
s
)
return
s
def
get_engine_from_settings
(
name
):
"""Return engine configuration from settings.yml of a given engine name"""
if
'engines'
not
in
settings
:
return
{}
for
engine
in
settings
[
'engines'
]:
if
'name'
not
in
engine
:
continue
if
name
==
engine
[
'name'
]:
return
engine
return
{}
searx/webapp.py
View file @
12f42d15
...
...
@@ -124,6 +124,7 @@ app = Flask(
app
.
jinja_env
.
trim_blocks
=
True
app
.
jinja_env
.
lstrip_blocks
=
True
app
.
jinja_env
.
add_extension
(
'jinja2.ext.loopcontrols'
)
app
.
secret_key
=
settings
[
'server'
][
'secret_key'
]
if
not
searx_debug
\
...
...
@@ -538,14 +539,16 @@ def index():
if
output_format
==
'html'
:
if
'content'
in
result
and
result
[
'content'
]:
result
[
'content'
]
=
highlight_content
(
escape
(
result
[
'content'
][:
1024
]),
search_query
.
query
)
result
[
'title'
]
=
highlight_content
(
escape
(
result
[
'title'
]
or
u''
),
search_query
.
query
)
if
'title'
in
result
and
result
[
'title'
]:
result
[
'title'
]
=
highlight_content
(
escape
(
result
[
'title'
]
or
u''
),
search_query
.
query
)
else
:
if
result
.
get
(
'content'
):
result
[
'content'
]
=
html_to_text
(
result
[
'content'
])
.
strip
()
# removing html content and whitespace duplications
result
[
'title'
]
=
' '
.
join
(
html_to_text
(
result
[
'title'
])
.
strip
()
.
split
())
result
[
'pretty_url'
]
=
prettify_url
(
result
[
'url'
])
if
'url'
in
result
:
result
[
'pretty_url'
]
=
prettify_url
(
result
[
'url'
])
# TODO, check if timezone is calculated right
if
'publishedDate'
in
result
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment