Browse Source

Merge pull request #1647 from dalf/no-inline-script

No inline script for oscar and simple theme
Alexandre Flament 5 years ago
parent
commit
8e62f7600f

+ 3 - 1
manage.sh

@@ -152,6 +152,8 @@ styles() {
 }
 
 grunt_build() {
+    npm_path_setup
+
     echo '[!] Grunt build : oscar theme'
     grunt --gruntfile "$SEARX_DIR/static/themes/oscar/gruntfile.js"
     echo '[!] Grunt build : simple theme'
@@ -243,7 +245,7 @@ Commands
     update_packages      - Check & update production dependency changes
     update_dev_packages  - Check & update development and production dependency changes
     install_geckodriver  - Download & install geckodriver if not already installed (required for robot_tests)
-    npm_packages         - Download & install npm dependencies (source manage.sh to update the PATH)
+    npm_packages         - Download & install npm dependencies
 
     Build
     -----

+ 732 - 0
searx/static/themes/oscar/css/logicodev-dark.css

@@ -0,0 +1,732 @@
+.searx-navbar {
+  background: #29314d;
+  height: 2.3rem;
+  font-size: 1.3rem;
+  line-height: 1.3rem;
+  padding: 0.5rem;
+  font-weight: bold;
+  margin-bottom: 0.8rem;
+}
+.searx-navbar a,
+.searx-navbar a:hover {
+  margin-right: 2.0rem;
+  color: white;
+  text-decoration: none;
+}
+.searx-navbar .instance a {
+  color: #01d7d4;
+  margin-left: 2.0rem;
+}
+#main-logo {
+  margin-top: 20vh;
+  margin-bottom: 25px;
+}
+#main-logo > img {
+  max-width: 350px;
+  width: 80%;
+}
+* {
+  border-radius: 0 !important;
+}
+html {
+  position: relative;
+  min-height: 100%;
+  color: #29314d;
+}
+body {
+  /* Margin bottom by footer height */
+  font-family: 'Roboto', Helvetica, Arial, sans-serif;
+  margin-bottom: 80px;
+  background-color: white;
+}
+body a {
+  color: #0088cc;
+}
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  /* Set the fixed height of the footer here */
+  height: 60px;
+  text-align: center;
+  color: #999;
+}
+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;
+}
+.onoff-checkbox {
+  width: 15%;
+}
+.onoffswitch {
+  position: relative;
+  width: 110px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+}
+.onoffswitch-checkbox {
+  display: none;
+}
+.onoffswitch-label {
+  display: block;
+  overflow: hidden;
+  cursor: pointer;
+  border: 2px solid #FFFFFF !important;
+  border-radius: 50px !important;
+}
+.onoffswitch-inner {
+  display: block;
+  transition: margin 0.3s ease-in 0s;
+}
+.onoffswitch-inner:before,
+.onoffswitch-inner:after {
+  display: block;
+  float: left;
+  width: 50%;
+  height: 30px;
+  padding: 0;
+  line-height: 40px;
+  font-size: 20px;
+  box-sizing: border-box;
+  content: "";
+  background-color: #EEEEEE;
+}
+.onoffswitch-switch {
+  display: block;
+  width: 37px;
+  background-color: #01d7d4;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 0px;
+  border: 2px solid #FFFFFF !important;
+  border-radius: 50px !important;
+  transition: all 0.3s ease-in 0s;
+}
+.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
+  margin-right: 0;
+}
+.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
+  right: 71px;
+  background-color: #A1A1A1;
+}
+.result_header {
+  margin-top: 0px;
+  margin-bottom: 2px;
+  font-size: 16px;
+}
+.result_header .favicon {
+  margin-bottom: -3px;
+}
+.result_header a {
+  color: #29314d;
+  text-decoration: none;
+}
+.result_header a:hover {
+  color: #0088cc;
+}
+.result_header a:visited {
+  color: #684898;
+}
+.result_header a .highlight {
+  background-color: #f6f9fa;
+}
+.result-content,
+.result-format,
+.result-source {
+  margin-top: 2px;
+  margin-bottom: 0;
+  word-wrap: break-word;
+  color: #666666;
+  font-size: 13px;
+}
+.result-content .highlight,
+.result-format .highlight,
+.result-source .highlight {
+  font-weight: bold;
+}
+.result-source {
+  font-size: 10px;
+  float: left;
+}
+.result-format {
+  font-size: 10px;
+  float: right;
+}
+.external-link {
+  color: #069025;
+  font-size: 12px;
+  margin-bottom: 15px;
+}
+.external-link a {
+  margin-right: 3px;
+}
+.result-default,
+.result-code,
+.result-torrent,
+.result-videos,
+.result-map {
+  clear: both;
+  padding: 2px 4px;
+}
+.result-default:hover,
+.result-code:hover,
+.result-torrent:hover,
+.result-videos:hover,
+.result-map:hover {
+  background-color: #f6f9fa;
+}
+.result-images {
+  float: left !important;
+  width: 24%;
+  margin: .5%;
+}
+.result-images a {
+  display: block;
+  width: 100%;
+  background-size: cover;
+}
+.img-thumbnail {
+  margin: 5px;
+  max-height: 128px;
+  min-height: 128px;
+}
+.result-videos {
+  clear: both;
+}
+.result-videos hr {
+  margin: 5px 0 15px 0;
+}
+.result-videos .collapse {
+  width: 100%;
+}
+.result-videos .in {
+  margin-bottom: 8px;
+}
+.result-torrent {
+  clear: both;
+}
+.result-torrent b {
+  margin-right: 5px;
+  margin-left: 5px;
+}
+.result-torrent .seeders {
+  color: #2ecc71;
+}
+.result-torrent .leechers {
+  color: #f35e77;
+}
+.result-map {
+  clear: both;
+}
+.result-code {
+  clear: both;
+}
+.result-code .code-fork,
+.result-code .code-fork a {
+  color: #666666;
+}
+.suggestion_item {
+  margin: 2px 5px;
+  max-width: 100%;
+}
+.suggestion_item .btn {
+  max-width: 100%;
+  white-space: normal;
+  word-wrap: break-word;
+  text-align: left;
+}
+.result_download {
+  margin-right: 5px;
+}
+#pagination {
+  margin-top: 30px;
+  padding-bottom: 60px;
+}
+.label-default {
+  color: #a4a4a4;
+  background: transparent;
+}
+.result .text-muted small {
+  word-wrap: break-word;
+}
+.modal-wrapper {
+  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+}
+.modal-wrapper {
+  background-clip: padding-box;
+  background-color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 6px;
+  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+  outline: 0 none;
+  position: relative;
+}
+.infobox .panel-heading {
+  background-color: #f6f9fa;
+}
+.infobox .panel-heading .panel-title {
+  font-weight: 700;
+}
+.infobox p {
+  font-family: "DejaVu Serif", Georgia, Cambria, "Times New Roman", Times, serif !important;
+  font-style: italic;
+}
+.infobox .btn {
+  background-color: #2ecc71;
+  border: none;
+}
+.infobox .btn a {
+  color: white;
+  margin: 5px;
+}
+.infobox .infobox_part {
+  margin-bottom: 20px;
+  word-wrap: break-word;
+  table-layout: fixed;
+}
+.infobox .infobox_part:last-child {
+  margin-bottom: 0;
+}
+.search_categories,
+#categories {
+  text-transform: capitalize;
+  margin-bottom: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  flex-flow: row wrap;
+  align-content: stretch;
+}
+.search_categories label,
+#categories label,
+.search_categories .input-group-addon,
+#categories .input-group-addon {
+  flex-grow: 1;
+  flex-basis: auto;
+  font-size: 1.2rem;
+  font-weight: normal;
+  background-color: white;
+  border: #dddddd 1px solid;
+  border-right: none;
+  color: #666666;
+  padding-bottom: 0.4rem;
+  padding-top: 0.4rem;
+  text-align: center;
+  min-width: 50px;
+}
+.search_categories label:last-child,
+#categories label:last-child,
+.search_categories .input-group-addon:last-child,
+#categories .input-group-addon:last-child {
+  border-right: #dddddd 1px solid;
+}
+.search_categories input[type="checkbox"]:checked + label,
+#categories input[type="checkbox"]:checked + label {
+  color: #29314d;
+  font-weight: bold;
+  border-bottom: #01d7d4 5px solid;
+}
+#main-logo {
+  margin-top: 10vh;
+  margin-bottom: 25px;
+}
+#main-logo > img {
+  max-width: 350px;
+  width: 80%;
+}
+#q {
+  box-shadow: none;
+  border-right: none;
+  border-color: #a4a4a4;
+}
+#search_form .input-group-btn .btn {
+  border-color: #a4a4a4;
+}
+#search_form .input-group-btn .btn:hover {
+  background-color: #2ecc71;
+  color: white;
+}
+.custom-select {
+  appearance: none;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  font-size: 1.2rem;
+  font-weight: normal;
+  background-color: white;
+  border: #dddddd 1px solid;
+  color: #666666;
+  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAQAAACR313BAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
+AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZ
+cwAABFkAAARZAVnbJUkAAAAHdElNRQfgBxgLDwB20OFsAAAAbElEQVQY073OsQ3CMAAEwJMYwJGn
+sAehpoXJItltBkmcdZBYgIIiQoLglnz3ui+eP+bk5uneteTMZJa6OJuIqvYzSJoqwqBq8gdmTTW8
+6/dghxAUq4xsVYT9laBYXCw93Aajh7GPEF23t4fkBYevGFTANkPRAAAAJXRFWHRkYXRlOmNyZWF0
+ZQAyMDE2LTA3LTI0VDExOjU1OjU4KzAyOjAwRFqFOQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0w
+Ny0yNFQxMToxNTowMCswMjowMP7RDgQAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb
+7jwaAAAAAElFTkSuQmCC) 96% no-repeat;
+}
+.search-margin {
+  margin-bottom: 0.6em;
+}
+#advanced-search-container {
+  display: none;
+  text-align: left;
+  margin-bottom: 1rem;
+  clear: both;
+}
+#advanced-search-container label,
+#advanced-search-container .input-group-addon {
+  font-size: 1.2rem;
+  font-weight: normal;
+  background-color: white;
+  border: #dddddd 1px solid;
+  border-right: none;
+  color: #666666;
+  padding-bottom: 0.4rem;
+  padding-right: 0.7rem;
+  padding-left: 0.7rem;
+}
+#advanced-search-container label:last-child,
+#advanced-search-container .input-group-addon:last-child {
+  border-right: #dddddd 1px solid;
+}
+#advanced-search-container input[type="radio"] {
+  display: none;
+}
+#advanced-search-container input[type="radio"]:checked + label {
+  color: #29314d;
+  font-weight: bold;
+  border-bottom: #01d7d4 5px solid;
+}
+#check-advanced {
+  display: none;
+}
+#check-advanced:checked ~ #advanced-search-container {
+  display: block;
+}
+.advanced {
+  padding: 0;
+  margin-top: 0.3rem;
+  text-align: right;
+}
+.advanced label,
+.advanced select {
+  cursor: pointer;
+}
+.cursor-text {
+  cursor: text !important;
+}
+.cursor-pointer {
+  cursor: pointer !important;
+}
+pre,
+code {
+  font-family: 'Ubuntu Mono', 'Courier New', 'Lucida Console', monospace !important;
+}
+.lineno {
+  margin-right: 5px;
+}
+.highlight .hll {
+  background-color: #ffffcc;
+}
+.highlight {
+  background: #f8f8f8;
+}
+.highlight .c {
+  color: #556366;
+  font-style: italic;
+}
+/* Comment */
+.highlight .err {
+  border: 1px solid #ffa92f;
+}
+/* Error */
+.highlight .k {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword */
+.highlight .o {
+  color: #d19a66;
+}
+/* Operator */
+.highlight .cm {
+  color: #556366;
+  font-style: italic;
+}
+/* Comment.Multiline */
+.highlight .cp {
+  color: #bc7a00;
+}
+/* Comment.Preproc */
+.highlight .c1 {
+  color: #556366;
+  font-style: italic;
+}
+/* Comment.Single */
+.highlight .cs {
+  color: #556366;
+  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: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Constant */
+.highlight .kd {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Declaration */
+.highlight .kn {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Namespace */
+.highlight .kp {
+  color: #be74d5;
+}
+/* Keyword.Pseudo */
+.highlight .kr {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Reserved */
+.highlight .kt {
+  color: #d46c72;
+}
+/* Keyword.Type */
+.highlight .m {
+  color: #d19a66;
+}
+/* Literal.Number */
+.highlight .s {
+  color: #86c372;
+}
+/* Literal.String */
+.highlight .na {
+  color: #7d9029;
+}
+/* Name.Attribute */
+.highlight .nb {
+  color: #be74d5;
+}
+/* Name.Builtin */
+.highlight .nc {
+  color: #61AFEF;
+  font-weight: bold;
+}
+/* Name.Class */
+.highlight .no {
+  color: #d19a66;
+}
+/* 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: #61afef;
+}
+/* Name.Function */
+.highlight .nl {
+  color: #a0a000;
+}
+/* Name.Label */
+.highlight .nn {
+  color: #61AFEF;
+  font-weight: bold;
+}
+/* Name.Namespace */
+.highlight .nt {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Name.Tag */
+.highlight .nv {
+  color: #dfc06f;
+}
+/* Name.Variable */
+.highlight .ow {
+  color: #AA22FF;
+  font-weight: bold;
+}
+/* Operator.Word */
+.highlight .w {
+  color: #d7dae0;
+}
+/* Text.Whitespace */
+.highlight .mf {
+  color: #d19a66;
+}
+/* Literal.Number.Float */
+.highlight .mh {
+  color: #d19a66;
+}
+/* Literal.Number.Hex */
+.highlight .mi {
+  color: #d19a66;
+}
+/* Literal.Number.Integer */
+.highlight .mo {
+  color: #d19a66;
+}
+/* Literal.Number.Oct */
+.highlight .sb {
+  color: #86c372;
+}
+/* Literal.String.Backtick */
+.highlight .sc {
+  color: #86c372;
+}
+/* Literal.String.Char */
+.highlight .sd {
+  color: #86C372;
+  font-style: italic;
+}
+/* Literal.String.Doc */
+.highlight .s2 {
+  color: #86c372;
+}
+/* Literal.String.Double */
+.highlight .se {
+  color: #BB6622;
+  font-weight: bold;
+}
+/* Literal.String.Escape */
+.highlight .sh {
+  color: #86c372;
+}
+/* Literal.String.Heredoc */
+.highlight .si {
+  color: #BB6688;
+  font-weight: bold;
+}
+/* Literal.String.Interpol */
+.highlight .sx {
+  color: #be74d5;
+}
+/* Literal.String.Other */
+.highlight .sr {
+  color: #bb6688;
+}
+/* Literal.String.Regex */
+.highlight .s1 {
+  color: #86c372;
+}
+/* Literal.String.Single */
+.highlight .ss {
+  color: #dfc06f;
+}
+/* Literal.String.Symbol */
+.highlight .bp {
+  color: #be74d5;
+}
+/* Name.Builtin.Pseudo */
+.highlight .vc {
+  color: #dfc06f;
+}
+/* Name.Variable.Class */
+.highlight .vg {
+  color: #dfc06f;
+}
+/* Name.Variable.Global */
+.highlight .vi {
+  color: #dfc06f;
+}
+/* Name.Variable.Instance */
+.highlight .il {
+  color: #d19a66;
+}
+/* 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;
+  color: #556366;
+}
+.highlight .lineno::selection {
+  background: transparent;
+  /* WebKit/Blink Browsers */
+}
+.highlight .lineno::-moz-selection {
+  background: transparent;
+  /* Gecko Browsers */
+}
+.highlight pre {
+  background-color: #282C34;
+  color: #D7DAE0;
+  border: none;
+  margin-bottom: 25px;
+  font-size: 15px;
+  padding: 20px 10px;
+}
+.highlight {
+  font-weight: 700;
+}
+.table > tbody > tr > td,
+.table > tbody > tr > th {
+  vertical-align: middle !important;
+}

+ 931 - 0
searx/static/themes/oscar/css/logicodev.css

@@ -0,0 +1,931 @@
+* {
+  border-radius: 0 !important;
+}
+html {
+  position: relative;
+  min-height: 100%;
+  color: #29314d;
+}
+body {
+  /* Margin bottom by footer height */
+  font-family: 'Roboto', Helvetica, Arial, sans-serif;
+  margin-bottom: 80px;
+  background-color: white;
+}
+body a {
+  color: #0088cc;
+}
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  /* Set the fixed height of the footer here */
+  height: 60px;
+  text-align: center;
+  color: #999;
+}
+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;
+}
+.onoff-checkbox {
+  width: 15%;
+}
+.onoffswitch {
+  position: relative;
+  width: 110px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+}
+.onoffswitch-checkbox {
+  display: none;
+}
+.onoffswitch-label {
+  display: block;
+  overflow: hidden;
+  cursor: pointer;
+  border: 2px solid #FFFFFF !important;
+  border-radius: 50px !important;
+}
+.onoffswitch-inner {
+  display: block;
+  transition: margin 0.3s ease-in 0s;
+}
+.onoffswitch-inner:before,
+.onoffswitch-inner:after {
+  display: block;
+  float: left;
+  width: 50%;
+  height: 30px;
+  padding: 0;
+  line-height: 40px;
+  font-size: 20px;
+  box-sizing: border-box;
+  content: "";
+  background-color: #EEEEEE;
+}
+.onoffswitch-switch {
+  display: block;
+  width: 37px;
+  background-color: #01d7d4;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 0px;
+  border: 2px solid #FFFFFF !important;
+  border-radius: 50px !important;
+  transition: all 0.3s ease-in 0s;
+}
+.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
+  margin-right: 0;
+}
+.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
+  right: 71px;
+  background-color: #A1A1A1;
+}
+.result_header {
+  margin-top: 0px;
+  margin-bottom: 2px;
+  font-size: 16px;
+}
+.result_header .favicon {
+  margin-bottom: -3px;
+}
+.result_header a {
+  color: #29314d;
+  text-decoration: none;
+}
+.result_header a:hover {
+  color: #0088cc;
+}
+.result_header a:visited {
+  color: #684898;
+}
+.result_header a .highlight {
+  background-color: #f6f9fa;
+}
+.result-content,
+.result-format,
+.result-source {
+  margin-top: 2px;
+  margin-bottom: 0;
+  word-wrap: break-word;
+  color: #666666;
+  font-size: 13px;
+}
+.result-content .highlight,
+.result-format .highlight,
+.result-source .highlight {
+  font-weight: bold;
+}
+.result-source {
+  font-size: 10px;
+  float: left;
+}
+.result-format {
+  font-size: 10px;
+  float: right;
+}
+.external-link {
+  color: #069025;
+  font-size: 12px;
+  margin-bottom: 15px;
+}
+.external-link a {
+  margin-right: 3px;
+}
+.result-default,
+.result-code,
+.result-torrent,
+.result-videos,
+.result-map {
+  clear: both;
+  padding: 2px 4px;
+}
+.result-default:hover,
+.result-code:hover,
+.result-torrent:hover,
+.result-videos:hover,
+.result-map:hover {
+  background-color: #f6f9fa;
+}
+.result-images {
+  float: left !important;
+  width: 24%;
+  margin: .5%;
+}
+.result-images a {
+  display: block;
+  width: 100%;
+  background-size: cover;
+}
+.img-thumbnail {
+  margin: 5px;
+  max-height: 128px;
+  min-height: 128px;
+}
+.result-videos {
+  clear: both;
+}
+.result-videos hr {
+  margin: 5px 0 15px 0;
+}
+.result-videos .collapse {
+  width: 100%;
+}
+.result-videos .in {
+  margin-bottom: 8px;
+}
+.result-torrent {
+  clear: both;
+}
+.result-torrent b {
+  margin-right: 5px;
+  margin-left: 5px;
+}
+.result-torrent .seeders {
+  color: #2ecc71;
+}
+.result-torrent .leechers {
+  color: #f35e77;
+}
+.result-map {
+  clear: both;
+}
+.result-code {
+  clear: both;
+}
+.result-code .code-fork,
+.result-code .code-fork a {
+  color: #666666;
+}
+.suggestion_item {
+  margin: 2px 5px;
+  max-width: 100%;
+}
+.suggestion_item .btn {
+  max-width: 100%;
+  white-space: normal;
+  word-wrap: break-word;
+  text-align: left;
+}
+.result_download {
+  margin-right: 5px;
+}
+#pagination {
+  margin-top: 30px;
+  padding-bottom: 60px;
+}
+.label-default {
+  color: #a4a4a4;
+  background: transparent;
+}
+.result .text-muted small {
+  word-wrap: break-word;
+}
+.modal-wrapper {
+  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+}
+.modal-wrapper {
+  background-clip: padding-box;
+  background-color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 6px;
+  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+  outline: 0 none;
+  position: relative;
+}
+.infobox .panel-heading {
+  background-color: #f6f9fa;
+}
+.infobox .panel-heading .panel-title {
+  font-weight: 700;
+}
+.infobox p {
+  font-family: "DejaVu Serif", Georgia, Cambria, "Times New Roman", Times, serif !important;
+  font-style: italic;
+}
+.infobox .btn {
+  background-color: #2ecc71;
+  border: none;
+}
+.infobox .btn a {
+  color: white;
+  margin: 5px;
+}
+.infobox .infobox_part {
+  margin-bottom: 20px;
+  word-wrap: break-word;
+  table-layout: fixed;
+}
+.infobox .infobox_part:last-child {
+  margin-bottom: 0;
+}
+.search_categories,
+#categories {
+  text-transform: capitalize;
+  margin-bottom: 0.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  flex-flow: row wrap;
+  align-content: stretch;
+}
+.search_categories label,
+#categories label,
+.search_categories .input-group-addon,
+#categories .input-group-addon {
+  flex-grow: 1;
+  flex-basis: auto;
+  font-size: 1.2rem;
+  font-weight: normal;
+  background-color: white;
+  border: #dddddd 1px solid;
+  border-right: none;
+  color: #666666;
+  padding-bottom: 0.4rem;
+  padding-top: 0.4rem;
+  text-align: center;
+  min-width: 50px;
+}
+.search_categories label:last-child,
+#categories label:last-child,
+.search_categories .input-group-addon:last-child,
+#categories .input-group-addon:last-child {
+  border-right: #dddddd 1px solid;
+}
+.search_categories input[type="checkbox"]:checked + label,
+#categories input[type="checkbox"]:checked + label {
+  color: #29314d;
+  font-weight: bold;
+  border-bottom: #01d7d4 5px solid;
+}
+#main-logo {
+  margin-top: 10vh;
+  margin-bottom: 25px;
+}
+#main-logo > img {
+  max-width: 350px;
+  width: 80%;
+}
+#q {
+  box-shadow: none;
+  border-right: none;
+  border-color: #a4a4a4;
+}
+#search_form .input-group-btn .btn {
+  border-color: #a4a4a4;
+}
+#search_form .input-group-btn .btn:hover {
+  background-color: #2ecc71;
+  color: white;
+}
+.custom-select {
+  appearance: none;
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  font-size: 1.2rem;
+  font-weight: normal;
+  background-color: white;
+  border: #dddddd 1px solid;
+  color: #666666;
+  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAQAAACR313BAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
+AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZ
+cwAABFkAAARZAVnbJUkAAAAHdElNRQfgBxgLDwB20OFsAAAAbElEQVQY073OsQ3CMAAEwJMYwJGn
+sAehpoXJItltBkmcdZBYgIIiQoLglnz3ui+eP+bk5uneteTMZJa6OJuIqvYzSJoqwqBq8gdmTTW8
+6/dghxAUq4xsVYT9laBYXCw93Aajh7GPEF23t4fkBYevGFTANkPRAAAAJXRFWHRkYXRlOmNyZWF0
+ZQAyMDE2LTA3LTI0VDExOjU1OjU4KzAyOjAwRFqFOQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0w
+Ny0yNFQxMToxNTowMCswMjowMP7RDgQAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb
+7jwaAAAAAElFTkSuQmCC) 96% no-repeat;
+}
+.search-margin {
+  margin-bottom: 0.6em;
+}
+#advanced-search-container {
+  display: none;
+  text-align: left;
+  margin-bottom: 1rem;
+  clear: both;
+}
+#advanced-search-container label,
+#advanced-search-container .input-group-addon {
+  font-size: 1.2rem;
+  font-weight: normal;
+  background-color: white;
+  border: #dddddd 1px solid;
+  border-right: none;
+  color: #666666;
+  padding-bottom: 0.4rem;
+  padding-right: 0.7rem;
+  padding-left: 0.7rem;
+}
+#advanced-search-container label:last-child,
+#advanced-search-container .input-group-addon:last-child {
+  border-right: #dddddd 1px solid;
+}
+#advanced-search-container input[type="radio"] {
+  display: none;
+}
+#advanced-search-container input[type="radio"]:checked + label {
+  color: #29314d;
+  font-weight: bold;
+  border-bottom: #01d7d4 5px solid;
+}
+#check-advanced {
+  display: none;
+}
+#check-advanced:checked ~ #advanced-search-container {
+  display: block;
+}
+.advanced {
+  padding: 0;
+  margin-top: 0.3rem;
+  text-align: right;
+}
+.advanced label,
+.advanced select {
+  cursor: pointer;
+}
+.cursor-text {
+  cursor: text !important;
+}
+.cursor-pointer {
+  cursor: pointer !important;
+}
+pre,
+code {
+  font-family: 'Ubuntu Mono', 'Courier New', 'Lucida Console', monospace !important;
+}
+.lineno {
+  margin-right: 5px;
+}
+.highlight .hll {
+  background-color: #ffffcc;
+}
+.highlight {
+  background: #f8f8f8;
+}
+.highlight .c {
+  color: #556366;
+  font-style: italic;
+}
+/* Comment */
+.highlight .err {
+  border: 1px solid #ffa92f;
+}
+/* Error */
+.highlight .k {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword */
+.highlight .o {
+  color: #d19a66;
+}
+/* Operator */
+.highlight .cm {
+  color: #556366;
+  font-style: italic;
+}
+/* Comment.Multiline */
+.highlight .cp {
+  color: #bc7a00;
+}
+/* Comment.Preproc */
+.highlight .c1 {
+  color: #556366;
+  font-style: italic;
+}
+/* Comment.Single */
+.highlight .cs {
+  color: #556366;
+  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: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Constant */
+.highlight .kd {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Declaration */
+.highlight .kn {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Namespace */
+.highlight .kp {
+  color: #be74d5;
+}
+/* Keyword.Pseudo */
+.highlight .kr {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Keyword.Reserved */
+.highlight .kt {
+  color: #d46c72;
+}
+/* Keyword.Type */
+.highlight .m {
+  color: #d19a66;
+}
+/* Literal.Number */
+.highlight .s {
+  color: #86c372;
+}
+/* Literal.String */
+.highlight .na {
+  color: #7d9029;
+}
+/* Name.Attribute */
+.highlight .nb {
+  color: #be74d5;
+}
+/* Name.Builtin */
+.highlight .nc {
+  color: #61AFEF;
+  font-weight: bold;
+}
+/* Name.Class */
+.highlight .no {
+  color: #d19a66;
+}
+/* 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: #61afef;
+}
+/* Name.Function */
+.highlight .nl {
+  color: #a0a000;
+}
+/* Name.Label */
+.highlight .nn {
+  color: #61AFEF;
+  font-weight: bold;
+}
+/* Name.Namespace */
+.highlight .nt {
+  color: #BE74D5;
+  font-weight: bold;
+}
+/* Name.Tag */
+.highlight .nv {
+  color: #dfc06f;
+}
+/* Name.Variable */
+.highlight .ow {
+  color: #AA22FF;
+  font-weight: bold;
+}
+/* Operator.Word */
+.highlight .w {
+  color: #d7dae0;
+}
+/* Text.Whitespace */
+.highlight .mf {
+  color: #d19a66;
+}
+/* Literal.Number.Float */
+.highlight .mh {
+  color: #d19a66;
+}
+/* Literal.Number.Hex */
+.highlight .mi {
+  color: #d19a66;
+}
+/* Literal.Number.Integer */
+.highlight .mo {
+  color: #d19a66;
+}
+/* Literal.Number.Oct */
+.highlight .sb {
+  color: #86c372;
+}
+/* Literal.String.Backtick */
+.highlight .sc {
+  color: #86c372;
+}
+/* Literal.String.Char */
+.highlight .sd {
+  color: #86C372;
+  font-style: italic;
+}
+/* Literal.String.Doc */
+.highlight .s2 {
+  color: #86c372;
+}
+/* Literal.String.Double */
+.highlight .se {
+  color: #BB6622;
+  font-weight: bold;
+}
+/* Literal.String.Escape */
+.highlight .sh {
+  color: #86c372;
+}
+/* Literal.String.Heredoc */
+.highlight .si {
+  color: #BB6688;
+  font-weight: bold;
+}
+/* Literal.String.Interpol */
+.highlight .sx {
+  color: #be74d5;
+}
+/* Literal.String.Other */
+.highlight .sr {
+  color: #bb6688;
+}
+/* Literal.String.Regex */
+.highlight .s1 {
+  color: #86c372;
+}
+/* Literal.String.Single */
+.highlight .ss {
+  color: #dfc06f;
+}
+/* Literal.String.Symbol */
+.highlight .bp {
+  color: #be74d5;
+}
+/* Name.Builtin.Pseudo */
+.highlight .vc {
+  color: #dfc06f;
+}
+/* Name.Variable.Class */
+.highlight .vg {
+  color: #dfc06f;
+}
+/* Name.Variable.Global */
+.highlight .vi {
+  color: #dfc06f;
+}
+/* Name.Variable.Instance */
+.highlight .il {
+  color: #d19a66;
+}
+/* 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;
+  color: #556366;
+}
+.highlight .lineno::selection {
+  background: transparent;
+  /* WebKit/Blink Browsers */
+}
+.highlight .lineno::-moz-selection {
+  background: transparent;
+  /* Gecko Browsers */
+}
+.highlight pre {
+  background-color: #282C34;
+  color: #D7DAE0;
+  border: none;
+  margin-bottom: 25px;
+  font-size: 15px;
+  padding: 20px 10px;
+}
+.highlight {
+  font-weight: 700;
+}
+.table > tbody > tr > td,
+.table > tbody > tr > th {
+  vertical-align: middle !important;
+}
+/*Global*/
+body {
+  background: #1d1f21 none !important;
+  color: #D5D8D7 !important;
+}
+a {
+  color: #41a2ce !important;
+  text-decoration: none !important;
+}
+a:hover {
+  color: #5F89AC !important;
+}
+input,
+button,
+textarea,
+select {
+  border: 1px solid #282a2e !important;
+  background-color: #444 !important;
+  color: #BBB !important;
+}
+input:focus,
+button:focus,
+textarea:focus,
+select:focus {
+  border: 1px solid #C5C8C6 !important;
+  box-shadow: initial !important;
+}
+div#advanced-search-container div#categories label {
+  background: none;
+  border: 1px solid #282a2e;
+}
+ul.nav li a {
+  border: 0 !important;
+  border-bottom: 1px solid #4d3f43 !important;
+}
+#categories *,
+.modal-wrapper * {
+  background: #1d1f21 none !important;
+  color: #D5D8D7 !important;
+}
+#categories * {
+  border: 1px solid #3d3f43 !important;
+}
+#categories *:checked + label {
+  border-bottom: 4px solid #3d9f94 !important;
+}
+.result-content,
+.result-source,
+.result-format {
+  color: #B5B8B7 !important;
+}
+.external-link {
+  color: #35B887 !important;
+}
+.table-striped tr td,
+.table-striped tr th {
+  border-color: #4d3f43 !important;
+}
+.highlight {
+  background: #333333 !important;
+}
+/*nav*/
+.navbar {
+  background: #1d1f21 none;
+  border: none;
+}
+.navbar .active,
+.menu {
+  background: none !important;
+}
+.label-default {
+  background: none;
+  color: #BBB;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus,
+.nav-tabs.nav-justified > .active > a {
+  background-color: #282a2e !important;
+}
+/*Search Page*/
+.result-default:hover,
+.result-code:hover,
+.result-torrent:hover,
+.result-videos:hover,
+.result-map:hover {
+  background-color: #222426;
+}
+/*buttons*/
+.btn {
+  color: #BBB;
+  background-color: #444 ;
+  border: 1px solid #282a2e;
+}
+.btn:hover {
+  color: #444 !important;
+  background-color: #BBB !important;
+}
+.btn-primary.active {
+  color: #C5C8C6;
+  background-color: #5F89AC;
+  border-color: #5F89AC;
+}
+/*Right Pannels*/
+.panel {
+  border: 1px solid #111;
+  background: none;
+}
+.panel-heading {
+  color: #C5C8C6 !important;
+  background: #282a2e !important;
+  border-bottom: none;
+}
+.panel-body {
+  color: #C5C8C6 !important;
+  background: #1d1f21 !important;
+  border-color: #111 !important;
+}
+p.btn.btn-default {
+  background: none;
+}
+.table-striped > tbody > tr:nth-child(odd) > td,
+.table-striped > tbody > tr:nth-child(odd) > th,
+.table-striped > thead > tr:nth-child(odd) > th {
+  background: #2d2f32 none !important;
+  color: #D5D8D7 !important;
+}
+.label-success {
+  background: #1d6f42 none !important;
+}
+.label-danger {
+  background: #ad1f12 none !important;
+}
+.searx-navbar {
+  background: #333334;
+  height: 2.3rem;
+  font-size: 1.3rem;
+  line-height: 1.3rem;
+  padding: 0.5rem;
+  font-weight: bold;
+  margin-bottom: 0.8rem;
+}
+.searx-navbar a,
+.searx-navbar a:hover {
+  margin-right: 2.0rem;
+  color: white;
+  text-decoration: none;
+}
+.searx-navbar .instance a {
+  color: #01d7d4;
+  margin-left: 2.0rem;
+}
+#main-logo {
+  margin-top: 20vh;
+  margin-bottom: 25px;
+}
+#main-logo > img {
+  max-width: 350px;
+  width: 80%;
+}
+.onoffswitch-inner:before,
+.onoffswitch-inner:after {
+  background: #1d1f21 none !important;
+}
+.onoffswitch-switch,
+.onoffswitch-label {
+  border: 2px solid #3d3f43 !important;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+  background-color: #3d3f43 !important;
+}
+/*Images search*/
+.img-thumbnail,
+.thumbnail {
+  padding: 0px;
+  line-height: 1.42857143;
+  background: none;
+  border: none;
+}
+.modal-content {
+  background: #1d1f21 none !important;
+}
+/*Preferences*/
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+  background: rgba(240, 0, 0, 0.56) !important;
+  color: #C5C8C6 !important;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+  background: rgba(237, 59, 59, 0.61) !important;
+  color: #C5C8C6 !important;
+}
+.table-hover > tbody > tr:hover > td,
+.table-hover > tbody > tr:hover > th {
+  background: #66696e !important;
+}
+.btn-success {
+  color: #C5C8C6;
+  background: #449d44;
+}
+.btn-danger {
+  color: #C5C8C6;
+  background: #d9534f;
+}
+.well {
+  background: #444;
+  border-color: #282a2e;
+}
+.highlight {
+  background-color: transparent !important;
+}

+ 562 - 0
searx/static/themes/oscar/css/pointhi.css

@@ -0,0 +1,562 @@
+html {
+  position: relative;
+  min-height: 100%;
+}
+body {
+  /* Margin bottom by footer height */
+  margin-bottom: 80px;
+}
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  /* Set the fixed height of the footer here */
+  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;
+}
+.onoff-checkbox {
+  width: 15%;
+}
+.onoffswitch {
+  position: relative;
+  width: 110px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+}
+.onoffswitch-checkbox {
+  display: none;
+}
+.onoffswitch-label {
+  display: block;
+  overflow: hidden;
+  cursor: pointer;
+  border: 2px solid #FFFFFF !important;
+  border-radius: 50px !important;
+}
+.onoffswitch-inner {
+  display: block;
+  transition: margin 0.3s ease-in 0s;
+}
+.onoffswitch-inner:before,
+.onoffswitch-inner:after {
+  display: block;
+  float: left;
+  width: 50%;
+  height: 30px;
+  padding: 0;
+  line-height: 40px;
+  font-size: 20px;
+  box-sizing: border-box;
+  content: "";
+  background-color: #EEEEEE;
+}
+.onoffswitch-switch {
+  display: block;
+  width: 37px;
+  background-color: #00CC00;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  right: 0px;
+  border: 2px solid #FFFFFF !important;
+  border-radius: 50px !important;
+  transition: all 0.3s ease-in 0s;
+}
+.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {
+  margin-right: 0;
+}
+.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {
+  right: 71px;
+  background-color: #A1A1A1;
+}
+.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;
+  word-wrap: break-word;
+}
+.result-content .highlight {
+  font-weight: bold;
+}
+.result-default {
+  clear: both;
+}
+.result-images {
+  float: left !important;
+  height: 138px;
+}
+.img-thumbnail {
+  margin: 5px;
+  max-height: 128px;
+}
+.result-videos {
+  clear: both;
+}
+.result-torrents {
+  clear: both;
+}
+.result-map {
+  clear: both;
+}
+.result-code {
+  clear: both;
+}
+.suggestion_item {
+  margin: 2px 5px;
+  max-width: 100%;
+}
+.suggestion_item .btn {
+  max-width: 100%;
+  white-space: normal;
+  word-wrap: break-word;
+  text-align: left;
+}
+.result_download {
+  margin-right: 5px;
+}
+#pagination {
+  margin-top: 30px;
+  padding-bottom: 50px;
+}
+.label-default {
+  color: #AAA;
+  background: #FFF;
+}
+.result .text-muted small {
+  word-wrap: break-word;
+}
+.modal-wrapper {
+  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+}
+.modal-wrapper {
+  background-clip: padding-box;
+  background-color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 6px;
+  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+  outline: 0 none;
+  position: relative;
+}
+.infobox .infobox_part {
+  margin-bottom: 20px;
+  word-wrap: break-word;
+  table-layout: fixed;
+}
+.infobox .infobox_part:last-child {
+  margin-bottom: 0;
+}
+.search_categories,
+#categories {
+  text-transform: capitalize;
+  margin-bottom: 1.5rem;
+  margin-top: 1.5rem;
+  display: flex;
+  flex-wrap: wrap;
+  align-content: stretch;
+}
+.search_categories label,
+#categories label,
+.search_categories .input-group-addon,
+#categories .input-group-addon {
+  flex-grow: 1;
+  flex-basis: auto;
+  font-size: 1.3rem;
+  font-weight: normal;
+  background-color: white;
+  border: #DDD 1px solid;
+  border-right: none;
+  color: #333;
+  padding-bottom: 0.8rem;
+  padding-top: 0.8rem;
+  text-align: center;
+  min-width: 50px;
+}
+.search_categories label:last-child,
+#categories label:last-child,
+.search_categories .input-group-addon:last-child,
+#categories .input-group-addon:last-child {
+  border-right: #DDD 1px solid;
+}
+.search_categories input[type="checkbox"]:checked + label,
+#categories input[type="checkbox"]:checked + label {
+  color: black;
+  font-weight: bold;
+  background-color: #EEE;
+}
+#advanced-search-container {
+  display: none;
+  text-align: center;
+  margin-bottom: 1rem;
+  clear: both;
+}
+#advanced-search-container label,
+#advanced-search-container .input-group-addon {
+  font-size: 1.3rem;
+  font-weight: normal;
+  background-color: white;
+  border: #DDD 1px solid;
+  border-right: none;
+  color: #333;
+  padding-bottom: 0.8rem;
+  padding-left: 1.2rem;
+  padding-right: 1.2rem;
+}
+#advanced-search-container label:last-child,
+#advanced-search-container .input-group-addon:last-child {
+  border-right: #DDD 1px solid;
+}
+#advanced-search-container input[type="radio"] {
+  display: none;
+}
+#advanced-search-container input[type="radio"]:checked + label {
+  color: black;
+  font-weight: bold;
+  background-color: #EEE;
+}
+#check-advanced {
+  display: none;
+}
+#check-advanced:checked ~ #advanced-search-container {
+  display: block;
+}
+.advanced {
+  padding: 0;
+  margin-top: 0.3rem;
+  text-align: right;
+}
+.advanced label,
+.advanced select {
+  cursor: pointer;
+}
+.cursor-text {
+  cursor: text !important;
+}
+.cursor-pointer {
+  cursor: pointer !important;
+}
+.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;
+}
+.highlight .lineno::selection {
+  background: transparent;
+  /* WebKit/Blink Browsers */
+}
+.highlight .lineno::-moz-selection {
+  background: transparent;
+  /* Gecko Browsers */
+}
+.searx-navbar {
+  background: #eee;
+  color: #aaa;
+  height: 2.3rem;
+  font-size: 1.3rem;
+  line-height: 1.3rem;
+  padding: 0.5rem;
+  font-weight: bold;
+  margin-bottom: 1.3rem;
+}
+.searx-navbar a,
+.searx-navbar a:hover {
+  margin-right: 2.0rem;
+  text-decoration: none;
+}
+.searx-navbar .instance a {
+  color: #444;
+  margin-left: 2.0rem;
+}
+.table > tbody > tr > td,
+.table > tbody > tr > th {
+  vertical-align: middle !important;
+}

+ 356 - 0
searx/static/themes/oscar/js/searx.js

@@ -0,0 +1,356 @@
+/**
+ * searx is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * searx is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with searx. If not, see < http://www.gnu.org/licenses/ >.
+ *
+ * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
+ */
+
+requirejs.config({
+    baseUrl: './static/themes/oscar/js',
+    paths: {
+        app: '../app'
+    }
+});
+;/**
+ * searx is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * searx is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with searx. If not, see < http://www.gnu.org/licenses/ >.
+ *
+ * (C) 2019 by Alexandre Flament
+ */
+window.searx = (function(d) {
+    'use strict';
+
+    // add data- properties
+    var script = d.currentScript  || (function() {
+        var scripts = d.getElementsByTagName('script');
+        return scripts[scripts.length - 1];
+    })();
+
+    return {
+        autocompleter: script.getAttribute('data-autocompleter') === 'true',
+        method: script.getAttribute('data-method')
+    };
+})(document);
+;/**
+ * searx is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * searx is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with searx. If not, see < http://www.gnu.org/licenses/ >.
+ *
+ * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
+ */
+
+if(searx.autocompleter) {
+    searx.searchResults = new Bloodhound({
+        datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
+        queryTokenizer: Bloodhound.tokenizers.whitespace,
+        remote: './autocompleter?q=%QUERY'
+    });
+    searx.searchResults.initialize();
+}
+
+$(document).ready(function(){ 
+    if(searx.autocompleter) {
+        $('#q').typeahead(null, {
+            name: 'search-results',
+            displayKey: function(result) {
+                return result;
+            },
+            source: searx.searchResults.ttAdapter()
+        });
+    }
+});
+;/**
+ * searx is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * searx is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with searx. If not, see < http://www.gnu.org/licenses/ >.
+ *
+ * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
+ */
+
+$(document).ready(function(){
+    /**
+     * focus element if class="autofocus" and id="q"
+     */
+    $('#q.autofocus').focus();
+
+    /**
+     * select full content on click if class="select-all-on-click"
+     */
+    $(".select-all-on-click").click(function () {
+        $(this).select();
+    });    
+
+    /**
+     * change text during btn-collapse click if possible
+     */
+    $('.btn-collapse').click(function() {
+        var btnTextCollapsed = $(this).data('btn-text-collapsed');
+        var btnTextNotCollapsed = $(this).data('btn-text-not-collapsed');
+        
+        if(btnTextCollapsed !== '' && btnTextNotCollapsed !== '') {
+            if($(this).hasClass('collapsed')) {
+                new_html = $(this).html().replace(btnTextCollapsed, btnTextNotCollapsed);
+            } else {
+                new_html = $(this).html().replace(btnTextNotCollapsed, btnTextCollapsed);
+            }
+            $(this).html(new_html);
+        }
+    });
+
+    /**
+     * change text during btn-toggle click if possible
+     */
+    $('.btn-toggle .btn').click(function() {
+        var btnClass = 'btn-' + $(this).data('btn-class');
+        var btnLabelDefault = $(this).data('btn-label-default');
+        var btnLabelToggled = $(this).data('btn-label-toggled');
+        if(btnLabelToggled !== '') {
+            if($(this).hasClass('btn-default')) {
+                new_html = $(this).html().replace(btnLabelDefault, btnLabelToggled);
+            } else {
+                new_html = $(this).html().replace(btnLabelToggled, btnLabelDefault);
+            }
+            $(this).html(new_html);
+        }
+        $(this).toggleClass(btnClass);
+        $(this).toggleClass('btn-default');
+    });
+	
+	/**
+     * change text during btn-toggle click if possible
+     */
+    $('.media-loader').click(function() {
+        var target = $(this).data('target');
+        var iframe_load = $(target + ' > iframe');
+        var srctest = iframe_load.attr('src');
+        if(srctest === undefined || srctest === false){
+            iframe_load.attr('src', iframe_load.data('src'));
+        }
+    });
+    
+    /**
+     * Select or deselect every categories on double clic
+     */
+    $(".btn-sm").dblclick(function() {
+    var btnClass = 'btn-' + $(this).data('btn-class'); // primary
+        if($(this).hasClass('btn-default')) {
+            $(".btn-sm > input").attr('checked', 'checked');
+            $(".btn-sm > input").prop("checked", true);
+            $(".btn-sm").addClass(btnClass);
+            $(".btn-sm").addClass('active');
+            $(".btn-sm").removeClass('btn-default');
+        } else {
+            $(".btn-sm > input").attr('checked', '');
+            $(".btn-sm > input").removeAttr('checked');
+            $(".btn-sm > input").checked = false;
+            $(".btn-sm").removeClass(btnClass);
+            $(".btn-sm").removeClass('active');
+            $(".btn-sm").addClass('btn-default');
+        }
+    });
+});
+;/**
+ * searx is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * searx is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with searx. If not, see < http://www.gnu.org/licenses/ >.
+ *
+ * (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
+ */
+
+$(document).ready(function(){
+    $(".searx_overpass_request").on( "click", function( event ) {
+        var overpass_url = "https://overpass-api.de/api/interpreter?data=";
+        var query_start = overpass_url + "[out:json][timeout:25];(";
+        var query_end = ");out meta;";
+        
+        var osm_id = $(this).data('osm-id');
+        var osm_type = $(this).data('osm-type');
+        var result_table = $(this).data('result-table');
+        var result_table_loadicon = "#" + $(this).data('result-table-loadicon');
+        
+        // tags which can be ignored
+        var osm_ignore_tags = [ "addr:city", "addr:country", "addr:housenumber", "addr:postcode", "addr:street" ];
+        
+        if(osm_id && osm_type && result_table) {
+            result_table = "#" + result_table;
+            var query = null;
+            switch(osm_type) {
+                case 'node':
+                    query = query_start + "node(" + osm_id + ");" + query_end;
+                    break;
+                case 'way':
+                    query = query_start + "way(" + osm_id + ");" + query_end;
+                    break;
+                case 'relation':
+                    query = query_start + "relation(" + osm_id + ");" + query_end;
+                    break;
+                default:
+                    break;
+            }
+            if(query) {
+                //alert(query);
+                var ajaxRequest = $.ajax( query )
+                .done(function( html) {
+                    if(html && html.elements && html.elements[0]) {
+                        var element = html.elements[0];
+                        var newHtml = $(result_table).html();
+                        for (var row in element.tags) {
+                            if(element.tags.name === null || osm_ignore_tags.indexOf(row) == -1) {
+                                newHtml += "<tr><td>" + row + "</td><td>";
+                                switch(row) {
+                                    case "phone":
+                                    case "fax":
+                                        newHtml += "<a href=\"tel:" + element.tags[row].replace(/ /g,'') + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "email":
+                                        newHtml += "<a href=\"mailto:" + element.tags[row] + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "website":
+                                    case "url":
+                                        newHtml += "<a href=\"" + element.tags[row] + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "wikidata":
+                                        newHtml += "<a href=\"https://www.wikidata.org/wiki/" + element.tags[row] + "\">" + element.tags[row] + "</a>";
+                                        break;
+                                    case "wikipedia":
+                                        if(element.tags[row].indexOf(":") != -1) {
+                                            newHtml += "<a href=\"https://" + element.tags[row].substring(0,element.tags[row].indexOf(":")) + ".wikipedia.org/wiki/" + element.tags[row].substring(element.tags[row].indexOf(":")+1) + "\">" + element.tags[row] + "</a>";
+                                            break;
+                                        }
+                                    /* jshint ignore:start */
+                                    default:
+                                    /* jshint ignore:end */
+                                        newHtml += element.tags[row];
+                                        break;
+                                }
+                                newHtml += "</td></tr>";
+                            }
+                        }
+                        $(result_table).html(newHtml);
+                        $(result_table).removeClass('hidden');
+                        $(result_table_loadicon).addClass('hidden');
+                    }
+                })
+                .fail(function() {
+                    $(result_table_loadicon).html($(result_table_loadicon).html() + "<p class=\"text-muted\">could not load data!</p>");
+                });
+            }
+        }
+
+        // this event occour only once per element
+        $( this ).off( event );    
+    });
+
+    $(".searx_init_map").on( "click", function( event ) {
+        var leaflet_target = $(this).data('leaflet-target');
+        var map_lon = $(this).data('map-lon');
+        var map_lat = $(this).data('map-lat');
+        var map_zoom = $(this).data('map-zoom');
+        var map_boundingbox = $(this).data('map-boundingbox');
+        var map_geojson = $(this).data('map-geojson');
+
+        require(['leaflet-0.7.3.min'], function(leaflet) {
+            if(map_boundingbox) {
+                southWest = L.latLng(map_boundingbox[0], map_boundingbox[2]);
+                northEast = L.latLng(map_boundingbox[1], map_boundingbox[3]);
+                map_bounds = L.latLngBounds(southWest, northEast);
+            }
+
+            // TODO hack
+            // change default imagePath
+            L.Icon.Default.imagePath = 	"./static/themes/oscar/img/map";
+
+            // init map
+            var map = L.map(leaflet_target);
+
+            // create the tile layer with correct attribution
+	    var osmMapnikUrl='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
+	    var osmMapnikAttrib='Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';
+	    var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib});
+
+	    var osmWikimediaUrl='https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png';
+	    var osmWikimediaAttrib = 'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors';
+	    var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib});
+
+            // init map view
+            if(map_bounds) {
+                // TODO hack: https://github.com/Leaflet/Leaflet/issues/2021
+                setTimeout(function () {
+                    map.fitBounds(map_bounds, {
+                        maxZoom:17
+                    });
+                }, 0);
+            } else if (map_lon && map_lat) {
+                if(map_zoom) 
+                    map.setView(new L.LatLng(map_lat, map_lon),map_zoom);
+                else
+                    map.setView(new L.LatLng(map_lat, map_lon),8);
+            }
+
+	        map.addLayer(osmMapnik);
+	        
+	        var baseLayers = {
+             "OSM Mapnik": osmMapnik/*,
+             "OSM Wikimedia": osmWikimedia*/
+            };
+
+            L.control.layers(baseLayers).addTo(map);
+
+
+            if(map_geojson)
+                L.geoJson(map_geojson).addTo(map);
+            /*else if(map_bounds)
+                L.rectangle(map_bounds, {color: "#ff7800", weight: 3, fill:false}).addTo(map);*/
+        });
+
+        // this event occour only once per element
+        $( this ).off( event );
+    });
+});  

File diff suppressed because it is too large
+ 0 - 1
searx/static/themes/oscar/js/searx.min.js


+ 30 - 0
searx/static/themes/oscar/js/searx_src/01_init.js

@@ -0,0 +1,30 @@
+/**
+ * searx is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * searx is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with searx. If not, see < http://www.gnu.org/licenses/ >.
+ *
+ * (C) 2019 by Alexandre Flament
+ */
+window.searx = (function(d) {
+    'use strict';
+
+    // add data- properties
+    var script = d.currentScript  || (function() {
+        var scripts = d.getElementsByTagName('script');
+        return scripts[scripts.length - 1];
+    })();
+
+    return {
+        autocompleter: script.getAttribute('data-autocompleter') === 'true',
+        method: script.getAttribute('data-method')
+    };
+})(document);

+ 1 - 1
searx/static/themes/simple/css/searx-rtl.css

@@ -1,4 +1,4 @@
-/*! searx | 28-05-2019 | https://github.com/asciimoo/searx */
+/*! searx | 06-08-2019 | https://github.com/asciimoo/searx */
 /*
 * searx, A privacy-respecting, hackable metasearch engine
 *

File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/css/searx-rtl.min.css


+ 1 - 1
searx/static/themes/simple/css/searx.css

@@ -1,4 +1,4 @@
-/*! searx | 28-05-2019 | https://github.com/asciimoo/searx */
+/*! searx | 06-08-2019 | https://github.com/asciimoo/searx */
 /*
 * searx, A privacy-respecting, hackable metasearch engine
 *

File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/css/searx.min.css


+ 26 - 23
searx/static/themes/simple/gruntfile.js

@@ -10,21 +10,36 @@ module.exports = function(grunt) {
         tasks: ['jshint', 'concat', 'uglify', 'webfont', 'less:development', 'less:production']
       }
     },
-    concat: {
+    jshint: {
+      files: ['js/searx_src/*.js', 'js/searx_header/*.js'],
       options: {
-        separator: ';'
-      },
-      dist: {
-        src: ['js/searx_src/*.js'],
-        dest: 'js/searx.js'
+        reporterOutput: "",
+        proto: true,
+        // options here to override JSHint defaults
+        globals: {
+          browser: true,
+          jQuery: false,
+          devel: true
+        }
+      }
+    },
+    concat: {
+      head_and_body: {
+        options: {
+          separator: ';'
+        },
+        files: {
+          'js/searx.head.js': ['js/searx_head/*.js'],
+          'js/searx.js': ['js/searx_src/*.js']
+        }
       }
     },
     uglify: {
       options: {
         banner: '/*! simple/searx.min.js | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n',
-	output: {
-	    comments: 'some'
-	},
+        output: {
+	        comments: 'some'
+        },
         ie8: false,
         warnings: true,
         compress: false,
@@ -33,20 +48,8 @@ module.exports = function(grunt) {
       },
       dist: {
         files: {
-          'js/searx.min.js': ['<%= concat.dist.dest %>']
-        }
-      }
-    },
-    jshint: {
-      files: ['js/searx_src/*.js'],
-      options: {
-        reporterOutput: "",
-        proto: true,
-        // options here to override JSHint defaults
-        globals: {
-          browser: true,
-          jQuery: false,
-          devel: true
+          'js/searx.head.min.js': ['js/searx.head.js'],
+          'js/searx.min.js': ['js/searx.js']
         }
       }
     },

+ 40 - 0
searx/static/themes/simple/js/searx.head.js

@@ -0,0 +1,40 @@
+/**
+* searx is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* searx is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with searx. If not, see < http://www.gnu.org/licenses/ >.
+*
+* (C) 2019 by Alexandre Flament
+*
+*/
+(function(w, d) {
+    'use strict';
+
+    // add data- properties
+    var script = d.currentScript  || (function() {
+        var scripts = d.getElementsByTagName('script');
+        return scripts[scripts.length - 1];
+    })();
+
+    // try to detect touch screen
+    w.searx = {
+        touch: (("ontouchstart" in w) || w.DocumentTouch && document instanceof DocumentTouch) || false,
+        method: script.getAttribute('data-method'),
+        autocompleter: script.getAttribute('data-autocompleter') === 'true',
+        search_on_category_select: script.getAttribute('data-search-on-category-select') === 'true',
+        infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true',
+        static_path: script.getAttribute('data-static-path'),
+        no_item_found: script.getAttribute('data-no-item-found')
+    }
+
+    // update the css
+    d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js";
+})(window, document);

+ 4 - 0
searx/static/themes/simple/js/searx.head.min.js

@@ -0,0 +1,4 @@
+/*! simple/searx.min.js | 06-08-2019 | https://github.com/asciimoo/searx */
+
+(function(t,e){"use strict";var a=e.currentScript||function(){var t=e.getElementsByTagName("script");return t[t.length-1]}();t.searx={touch:"ontouchstart"in t||t.DocumentTouch&&document instanceof DocumentTouch||false,method:a.getAttribute("data-method"),autocompleter:a.getAttribute("data-autocompleter")==="true",search_on_category_select:a.getAttribute("data-search-on-category-select")==="true",infinite_scroll:a.getAttribute("data-infinite-scroll")==="true",static_path:a.getAttribute("data-static-path"),no_item_found:a.getAttribute("data-no-item-found")};e.getElementsByTagName("html")[0].className=t.searx.touch?"js touch":"js"})(window,document);
+//# sourceMappingURL=searx.head.min.js.map

+ 1 - 0
searx/static/themes/simple/js/searx.head.min.js.map

@@ -0,0 +1 @@
+{"version":3,"sources":["searx.head.js"],"names":["w","d","script","currentScript","scripts","getElementsByTagName","length","searx","touch","DocumentTouch","document","method","getAttribute","autocompleter","search_on_category_select","infinite_scroll","static_path","no_item_found","className","window"],"mappings":";;CAiBA,SAAUA,EAAGC,GACT,aAGA,IAAIC,EAASD,EAAEE,eAAkB,WAC7B,IAAIC,EAAUH,EAAEI,qBAAqB,UACrC,OAAOD,EAAQA,EAAQE,OAAS,GAFH,GAMjCN,EAAEO,MAAQ,CACNC,MAAS,iBAAkBR,GAAMA,EAAES,eAAiBC,oBAAoBD,eAAkB,MAC1FE,OAAQT,EAAOU,aAAa,eAC5BC,cAAeX,EAAOU,aAAa,wBAA0B,OAC7DE,0BAA2BZ,EAAOU,aAAa,oCAAsC,OACrFG,gBAAiBb,EAAOU,aAAa,0BAA4B,OACjEI,YAAad,EAAOU,aAAa,oBACjCK,cAAef,EAAOU,aAAa,uBAIvCX,EAAEI,qBAAqB,QAAQ,GAAGa,UAAalB,EAAEO,MAAW,MAAE,WAAW,MArB7E,CAsBGY,OAAQT","file":"searx.head.min.js"}

+ 6 - 6
searx/static/themes/simple/js/searx.js

@@ -15,7 +15,7 @@
 * (C) 2017 by Alexandre Flament, <alex@al-f.net>
 *
 */
-(function(w, d, searx) {
+window.searx = (function(w, d) {
 
   'use strict';
 
@@ -45,7 +45,7 @@
     }
   }
 
-  searx = searx || {};
+  var searx = window.searx || {};
 
   searx.on = function(obj, eventType, callback, useCapture) {
     useCapture = useCapture || false;
@@ -110,7 +110,7 @@
   };
 
   searx.loadStyle = function(src) {
-    var path = searx.staticPath + src,
+    var path = searx.static_path + src,
     id = "style_" + src.replace('.', '_'),
     s = d.getElementById(id);
     if (s === null) {
@@ -124,7 +124,7 @@
   };
 
   searx.loadScript = function(src, callback) {
-    var path = searx.staticPath + src,
+    var path = searx.static_path + src,
     id = "script_" + src.replace('.', '_'),
     s = d.getElementById(id);
     if (s === null) {
@@ -161,7 +161,7 @@
   });
   
   return searx;
-})(window, document, window.searx);
+})(window, document);
 ;(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
 /*
  * @license MIT
@@ -1529,7 +1529,7 @@ module.exports = AutoComplete;
       if (searx.autocompleter) {
         searx.autocomplete = AutoComplete.call(w, {
           Url: "./autocompleter",
-          EmptyMessage: searx.noItemFound,
+          EmptyMessage: searx.no_item_found,
           HttpMethod: searx.method,
           MinChars: 4,
           Delay: 300,

File diff suppressed because it is too large
+ 1 - 1
searx/static/themes/simple/js/searx.min.js


File diff suppressed because it is too large
+ 0 - 0
searx/static/themes/simple/js/searx.min.js.map


+ 40 - 0
searx/static/themes/simple/js/searx_head/00_init.js

@@ -0,0 +1,40 @@
+/**
+* searx is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* searx is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with searx. If not, see < http://www.gnu.org/licenses/ >.
+*
+* (C) 2019 by Alexandre Flament
+*
+*/
+(function(w, d) {
+    'use strict';
+
+    // add data- properties
+    var script = d.currentScript  || (function() {
+        var scripts = d.getElementsByTagName('script');
+        return scripts[scripts.length - 1];
+    })();
+
+    // try to detect touch screen
+    w.searx = {
+        touch: (("ontouchstart" in w) || w.DocumentTouch && document instanceof DocumentTouch) || false,
+        method: script.getAttribute('data-method'),
+        autocompleter: script.getAttribute('data-autocompleter') === 'true',
+        search_on_category_select: script.getAttribute('data-search-on-category-select') === 'true',
+        infinite_scroll: script.getAttribute('data-infinite-scroll') === 'true',
+        static_path: script.getAttribute('data-static-path'),
+        no_item_found: script.getAttribute('data-no-item-found')
+    }
+
+    // update the css
+    d.getElementsByTagName("html")[0].className = (w.searx.touch)?"js touch":"js";
+})(window, document);

+ 5 - 5
searx/static/themes/simple/js/searx_src/00_searx_toolkit.js

@@ -15,7 +15,7 @@
 * (C) 2017 by Alexandre Flament, <alex@al-f.net>
 *
 */
-(function(w, d, searx) {
+window.searx = (function(w, d) {
 
   'use strict';
 
@@ -45,7 +45,7 @@
     }
   }
 
-  searx = searx || {};
+  var searx = window.searx || {};
 
   searx.on = function(obj, eventType, callback, useCapture) {
     useCapture = useCapture || false;
@@ -110,7 +110,7 @@
   };
 
   searx.loadStyle = function(src) {
-    var path = searx.staticPath + src,
+    var path = searx.static_path + src,
     id = "style_" + src.replace('.', '_'),
     s = d.getElementById(id);
     if (s === null) {
@@ -124,7 +124,7 @@
   };
 
   searx.loadScript = function(src, callback) {
-    var path = searx.staticPath + src,
+    var path = searx.static_path + src,
     id = "script_" + src.replace('.', '_'),
     s = d.getElementById(id);
     if (s === null) {
@@ -161,4 +161,4 @@
   });
   
   return searx;
-})(window, document, window.searx);
+})(window, document);

+ 1 - 1
searx/static/themes/simple/js/searx_src/searx_search.js

@@ -73,7 +73,7 @@
       if (searx.autocompleter) {
         searx.autocomplete = AutoComplete.call(w, {
           Url: "./autocompleter",
-          EmptyMessage: searx.noItemFound,
+          EmptyMessage: searx.no_item_found,
           HttpMethod: searx.method,
           MinChars: 4,
           Delay: 300,

+ 3 - 7
searx/templates/oscar/base.html

@@ -37,12 +37,6 @@
     {% endblock %}
 
     <link title="{{ instance_name }}" type="application/opensearchdescription+xml" rel="search" href="{{ url_for('opensearch') }}"/>
-
-    <script type="text/javascript">
-        searx = {};
-        searx.method = "{{ method or 'POST' }}";
-        searx.autocompleter = {% if autocomplete %}true{% else %}false{% endif %};
-    </script>
     <noscript>
         <style type="text/css">
             .tab-content > .active_if_nojs, .active_if_nojs {display: block !important; visibility: visible !important;}
@@ -101,7 +95,9 @@
     <script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
     {% if autocomplete %}<script src="{{ url_for('static', filename='js/typeahead.bundle.min.js') }}"></script>{% endif %}
     <script src="{{ url_for('static', filename='js/require-2.1.15.min.js') }}"></script>
-    <script src="{{ url_for('static', filename='js/searx.min.js') }}"></script>
+    <script src="{{ url_for('static', filename='js/searx.min.js') }}"
+            data-method="{{ method or 'POST' }}"
+            data-autocompleter="{% if autocomplete %}true{% else %}false{% endif %}"></script>
     {% for script in scripts %}
         <script src="{{ url_for('static', filename=script) }}"></script>
     {% endfor %}

+ 11 - 14
searx/templates/simple/base.html

@@ -11,29 +11,26 @@
   <meta name="HandheldFriendly" content="True">
   <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
   <title>{% block title %}{% endblock %}{{ instance_name }}</title>
+  {% block meta %}{% endblock %}
   {% if rtl %}
   <link rel="stylesheet" href="{{ url_for('static', filename='css/searx-rtl.min.css') }}" type="text/css" media="screen" />
   {% else %}
   <link rel="stylesheet" href="{{ url_for('static', filename='css/searx.min.css') }}" type="text/css" media="screen" />
   {% endif %}
   {% block styles %}{% endblock %}
-  {% block meta %}{% endblock %}
+  <!--[if gte IE 9]>-->
+  <script src="{{ url_for('static', filename='js/searx.head.min.js') }}"
+          data-method="{{ method or 'POST' }}"
+          data-autocompleter="{% if autocomplete %}true{% else %}false{% endif %}"
+          data-search-on-category-select="{{ 'true' if 'plugins/js/search_on_category_select.js' in scripts else 'false'}}"
+          data-infinite-scroll="{{ 'true' if 'plugins/js/infinite_scroll.js' in scripts else 'false' }}"
+          data-static-path="{{ url_for('static', filename='themes/simple') }}/"
+          data-no-item-found="{{ _('No item found') }}"></script>
+  <!--<![endif]-->
   {% block head %}
   <link title="{{ instance_name }}" type="application/opensearchdescription+xml" rel="search" href="{{ url_for('opensearch') }}"/>
   {% endblock %}
   <link rel="shortcut icon" href="{{ url_for('static', filename='img/favicon.png') }}" />
-  <script type="text/javascript">
-    var searx = {
-      autocompleter: {% if autocomplete %}true{% else %}false{% endif %},
-      method: "{{ method or 'POST' }}",
-      touch: (("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch) || false,
-      staticPath: "{{ url_for('static', filename='themes/simple') }}/",
-      noItemFound: "{{ _('No item found') }}",
-      search_on_category_select: {{ 'true' if 'plugins/js/search_on_category_select.js' in scripts else 'false'}},
-      infinite_scroll: {{ 'true' if 'plugins/js/infinite_scroll.js' in scripts else 'false' }}
-    };
-    document.getElementsByTagName("html")[0].className = (searx.touch)?"js touch":"js";
-  </script>
 </head>
 <body>
   <main id="main_{{  self._TemplateReference__context.name|replace("simple/", "")|replace(".html", "") }}">
@@ -60,7 +57,7 @@
     </p>
   </footer>
   <!--[if gte IE 9]>-->
-  <script src="{{ url_for('static', filename='js/searx.min.js') }}" ></script>
+  <script src="{{ url_for('static', filename='js/searx.min.js') }}"></script>
   <!--<![endif]-->
 </body>
 </html>

Some files were not shown because too many files changed in this diff