summaryrefslogtreecommitdiff
path: root/searx/static/themes/oscar
diff options
context:
space:
mode:
Diffstat (limited to 'searx/static/themes/oscar')
-rw-r--r--searx/static/themes/oscar/.gitignore1
-rw-r--r--searx/static/themes/oscar/README.rst17
-rw-r--r--searx/static/themes/oscar/gruntfile.js96
-rw-r--r--searx/static/themes/oscar/img/favicon.pngbin0 -> 1853 bytes
-rw-r--r--searx/static/themes/oscar/img/loader.gifbin0 -> 8314 bytes
-rw-r--r--searx/static/themes/oscar/img/logo_searx_a.pngbin0 -> 9557 bytes
-rw-r--r--searx/static/themes/oscar/img/logo_searx_a_n.pngbin0 -> 9704 bytes
-rw-r--r--searx/static/themes/oscar/img/map/layers-2x.pngbin0 -> 1763 bytes
-rw-r--r--searx/static/themes/oscar/img/map/layers.pngbin0 -> 1142 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon-2x-green.pngbin0 -> 3753 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon-2x-orange.pngbin0 -> 3691 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon-2x-red.pngbin0 -> 3692 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon-2x.pngbin0 -> 4033 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon-green.pngbin0 -> 1696 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon-orange.pngbin0 -> 1714 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon-red.pngbin0 -> 1690 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-icon.pngbin0 -> 1747 bytes
-rw-r--r--searx/static/themes/oscar/img/map/marker-shadow.pngbin0 -> 797 bytes
-rw-r--r--searx/static/themes/oscar/img/searx_logo.pngbin0 -> 10611 bytes
-rw-r--r--searx/static/themes/oscar/js/searx_src/00_requirejs_config.js23
-rw-r--r--searx/static/themes/oscar/js/searx_src/autocompleter.js37
-rw-r--r--searx/static/themes/oscar/js/searx_src/element_modifiers.js99
-rw-r--r--searx/static/themes/oscar/js/searx_src/leaflet_map.js167
-rw-r--r--searx/static/themes/oscar/less/logicodev-dark/oscar.less245
-rw-r--r--searx/static/themes/oscar/less/logicodev/advanced.less49
-rw-r--r--searx/static/themes/oscar/less/logicodev/checkbox.less9
-rw-r--r--searx/static/themes/oscar/less/logicodev/code.less103
-rw-r--r--searx/static/themes/oscar/less/logicodev/cursor.less8
-rw-r--r--searx/static/themes/oscar/less/logicodev/footer.less30
-rw-r--r--searx/static/themes/oscar/less/logicodev/infobox.less37
-rw-r--r--searx/static/themes/oscar/less/logicodev/navbar.less31
-rw-r--r--searx/static/themes/oscar/less/logicodev/onoff.less57
-rw-r--r--searx/static/themes/oscar/less/logicodev/oscar.less23
-rw-r--r--searx/static/themes/oscar/less/logicodev/preferences.less3
-rw-r--r--searx/static/themes/oscar/less/logicodev/results.less177
-rw-r--r--searx/static/themes/oscar/less/logicodev/search.less80
-rw-r--r--searx/static/themes/oscar/less/logicodev/variables.less13
-rw-r--r--searx/static/themes/oscar/less/pointhi/advanced.less49
-rw-r--r--searx/static/themes/oscar/less/pointhi/checkbox.less9
-rw-r--r--searx/static/themes/oscar/less/pointhi/code.less79
-rw-r--r--searx/static/themes/oscar/less/pointhi/cursor.less8
-rw-r--r--searx/static/themes/oscar/less/pointhi/footer.less19
-rw-r--r--searx/static/themes/oscar/less/pointhi/infobox.less11
-rw-r--r--searx/static/themes/oscar/less/pointhi/navbar.less20
-rw-r--r--searx/static/themes/oscar/less/pointhi/onoff.less57
-rw-r--r--searx/static/themes/oscar/less/pointhi/oscar.less21
-rw-r--r--searx/static/themes/oscar/less/pointhi/preferences.less3
-rw-r--r--searx/static/themes/oscar/less/pointhi/results.less109
-rw-r--r--searx/static/themes/oscar/less/pointhi/search.less33
-rw-r--r--searx/static/themes/oscar/package.json16
50 files changed, 1739 insertions, 0 deletions
diff --git a/searx/static/themes/oscar/.gitignore b/searx/static/themes/oscar/.gitignore
new file mode 100644
index 0000000..c2658d7
--- /dev/null
+++ b/searx/static/themes/oscar/.gitignore
@@ -0,0 +1 @@
+node_modules/
diff --git a/searx/static/themes/oscar/README.rst b/searx/static/themes/oscar/README.rst
new file mode 100644
index 0000000..e7daa87
--- /dev/null
+++ b/searx/static/themes/oscar/README.rst
@@ -0,0 +1,17 @@
+install dependencies
+~~~~~~~~~~~~~~~~~~~~
+
+run this command in the directory ``searx/static/themes/oscar``
+
+``npm install``
+
+compile sources
+~~~~~~~~~~~~~~~
+
+run this command in the directory ``searx/static/themes/oscar``
+
+``grunt``
+
+or in the root directory:
+
+``make grunt``
diff --git a/searx/static/themes/oscar/gruntfile.js b/searx/static/themes/oscar/gruntfile.js
new file mode 100644
index 0000000..5913994
--- /dev/null
+++ b/searx/static/themes/oscar/gruntfile.js
@@ -0,0 +1,96 @@
+module.exports = function(grunt) {
+
+ grunt.initConfig({
+ pkg: grunt.file.readJSON('package.json'),
+ concat: {
+ options: {
+ separator: ';'
+ },
+ dist: {
+ src: ['js/searx_src/*.js'],
+ dest: 'js/searx.js'
+ }
+ },
+ uglify: {
+ options: {
+ banner: '/*! oscar/searx.min.js | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n'
+ },
+ dist: {
+ files: {
+ 'js/searx.min.js': ['<%= concat.dist.dest %>']
+ }
+ }
+ },
+ jshint: {
+ files: ['gruntfile.js', 'js/searx_src/*.js'],
+ options: {
+ reporterOutput: "",
+ // options here to override JSHint defaults
+ globals: {
+ jQuery: true,
+ console: true,
+ module: true,
+ document: true
+ }
+ }
+ },
+ less: {
+ development: {
+ options: {
+ paths: ["less/pointhi", "less/logicodev", "less/logicodev-dark"]
+ //banner: '/*! less/oscar/oscar.css | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n'
+ },
+ files: {"css/pointhi.css": "less/pointhi/oscar.less",
+ "css/logicodev.css": "less/logicodev-dark/oscar.less",
+ "css/logicodev-dark.css": "less/logicodev/oscar.less"}
+ },
+ production: {
+ options: {
+ paths: ["less/pointhi", "less/logicodev", "less/logicodev-dark"],
+ //banner: '/*! less/oscar/oscar.css | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n',
+ cleancss: true
+ },
+ files: {"css/pointhi.min.css": "less/pointhi/oscar.less",
+ "css/logicodev.min.css": "less/logicodev/oscar.less",
+ "css/logicodev-dark.min.css": "less/logicodev-dark/oscar.less"}
+ },
+ /*
+ // built with ./manage.sh styles
+ bootstrap: {
+ options: {
+ paths: ["less/bootstrap"],
+ cleancss: true
+ },
+ files: {"css/bootstrap.min.css": "less/bootstrap/bootstrap.less"}
+ },
+ */
+ },
+ watch: {
+ scripts: {
+ files: ['<%= jshint.files %>'],
+ tasks: ['jshint', 'concat', 'uglify']
+ },
+ oscar_styles: {
+ files: ['less/pointhi/**/*.less'],
+ tasks: ['less:development', 'less:production']
+ },
+ bootstrap_styles: {
+ files: ['less/bootstrap/**/*.less'],
+ tasks: ['less:bootstrap']
+ }
+ }
+ });
+
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.loadNpmTasks('grunt-contrib-watch');
+ grunt.loadNpmTasks('grunt-contrib-concat');
+ grunt.loadNpmTasks('grunt-contrib-less');
+
+ grunt.registerTask('test', ['jshint']);
+
+ grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'less']);
+
+ grunt.registerTask('styles', ['less']);
+
+};
diff --git a/searx/static/themes/oscar/img/favicon.png b/searx/static/themes/oscar/img/favicon.png
new file mode 100644
index 0000000..15b4575
--- /dev/null
+++ b/searx/static/themes/oscar/img/favicon.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/loader.gif b/searx/static/themes/oscar/img/loader.gif
new file mode 100644
index 0000000..419cdee
--- /dev/null
+++ b/searx/static/themes/oscar/img/loader.gif
Binary files differ
diff --git a/searx/static/themes/oscar/img/logo_searx_a.png b/searx/static/themes/oscar/img/logo_searx_a.png
new file mode 100644
index 0000000..9427900
--- /dev/null
+++ b/searx/static/themes/oscar/img/logo_searx_a.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/logo_searx_a_n.png b/searx/static/themes/oscar/img/logo_searx_a_n.png
new file mode 100644
index 0000000..5b24aea
--- /dev/null
+++ b/searx/static/themes/oscar/img/logo_searx_a_n.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/layers-2x.png b/searx/static/themes/oscar/img/map/layers-2x.png
new file mode 100644
index 0000000..0b30da6
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/layers-2x.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/layers.png b/searx/static/themes/oscar/img/map/layers.png
new file mode 100644
index 0000000..4297fd9
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/layers.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon-2x-green.png b/searx/static/themes/oscar/img/map/marker-icon-2x-green.png
new file mode 100644
index 0000000..7446bb0
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon-2x-green.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon-2x-orange.png b/searx/static/themes/oscar/img/map/marker-icon-2x-orange.png
new file mode 100644
index 0000000..ecd6773
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon-2x-orange.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon-2x-red.png b/searx/static/themes/oscar/img/map/marker-icon-2x-red.png
new file mode 100644
index 0000000..1d2e197
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon-2x-red.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon-2x.png b/searx/static/themes/oscar/img/map/marker-icon-2x.png
new file mode 100644
index 0000000..0015b64
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon-2x.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon-green.png b/searx/static/themes/oscar/img/map/marker-icon-green.png
new file mode 100644
index 0000000..f48ef41
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon-green.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon-orange.png b/searx/static/themes/oscar/img/map/marker-icon-orange.png
new file mode 100644
index 0000000..d0d2220
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon-orange.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon-red.png b/searx/static/themes/oscar/img/map/marker-icon-red.png
new file mode 100644
index 0000000..7a92b9e
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon-red.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-icon.png b/searx/static/themes/oscar/img/map/marker-icon.png
new file mode 100644
index 0000000..e2e9f75
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-icon.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/map/marker-shadow.png b/searx/static/themes/oscar/img/map/marker-shadow.png
new file mode 100644
index 0000000..d1e773c
--- /dev/null
+++ b/searx/static/themes/oscar/img/map/marker-shadow.png
Binary files differ
diff --git a/searx/static/themes/oscar/img/searx_logo.png b/searx/static/themes/oscar/img/searx_logo.png
new file mode 100644
index 0000000..307b42f
--- /dev/null
+++ b/searx/static/themes/oscar/img/searx_logo.png
Binary files differ
diff --git a/searx/static/themes/oscar/js/searx_src/00_requirejs_config.js b/searx/static/themes/oscar/js/searx_src/00_requirejs_config.js
new file mode 100644
index 0000000..1aa4349
--- /dev/null
+++ b/searx/static/themes/oscar/js/searx_src/00_requirejs_config.js
@@ -0,0 +1,23 @@
+/**
+ * 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'
+ }
+});
diff --git a/searx/static/themes/oscar/js/searx_src/autocompleter.js b/searx/static/themes/oscar/js/searx_src/autocompleter.js
new file mode 100644
index 0000000..70c66d2
--- /dev/null
+++ b/searx/static/themes/oscar/js/searx_src/autocompleter.js
@@ -0,0 +1,37 @@
+/**
+ * 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()
+ });
+ }
+});
diff --git a/searx/static/themes/oscar/js/searx_src/element_modifiers.js b/searx/static/themes/oscar/js/searx_src/element_modifiers.js
new file mode 100644
index 0000000..8e42805
--- /dev/null
+++ b/searx/static/themes/oscar/js/searx_src/element_modifiers.js
@@ -0,0 +1,99 @@
+/**
+ * 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');
+ }
+ });
+});
diff --git a/searx/static/themes/oscar/js/searx_src/leaflet_map.js b/searx/static/themes/oscar/js/searx_src/leaflet_map.js
new file mode 100644
index 0000000..4be46ac
--- /dev/null
+++ b/searx/static/themes/oscar/js/searx_src/leaflet_map.js
@@ -0,0 +1,167 @@
+/**
+ * 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 );
+ });
+});
diff --git a/searx/static/themes/oscar/less/logicodev-dark/oscar.less b/searx/static/themes/oscar/less/logicodev-dark/oscar.less
new file mode 100644
index 0000000..804dd76
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev-dark/oscar.less
@@ -0,0 +1,245 @@
+@import "../logicodev/variables.less";
+@import "../logicodev/footer.less";
+@import "../logicodev/checkbox.less";
+@import "../logicodev/onoff.less";
+@import "../logicodev/results.less";
+@import "../logicodev/infobox.less";
+@import "../logicodev/search.less";
+@import "../logicodev/advanced.less";
+@import "../logicodev/cursor.less";
+@import "../logicodev/code.less";
+@import "../logicodev/preferences.less";
+
+/*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 {
+ 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;
+
+ a, a:hover {
+ margin-right: 2.0rem;
+ color: white;
+ text-decoration: none;
+ }
+
+ .instance a {
+ color: @light-green;
+ margin-left: 2.0rem;
+ }
+}
+
+#main-logo {
+ margin-top: 20vh;
+ margin-bottom: 25px;
+
+ & > 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: rgb(102, 105, 110) !important;
+}
+
+.btn-success {
+ color: #C5C8C6;
+ background: #449d44;
+}
+
+.btn-danger {
+ color: #C5C8C6;
+ background: #d9534f;
+
+}
+
+.well {
+ background: #444;
+ border-color: #282a2e;
+}
+
+.highlight {
+ background-color: transparent !important;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/advanced.less b/searx/static/themes/oscar/less/logicodev/advanced.less
new file mode 100644
index 0000000..4c3827b
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/advanced.less
@@ -0,0 +1,49 @@
+#advanced-search-container {
+ display: none;
+ text-align: left;
+ margin-bottom: 1rem;
+ clear: both;
+
+ label, .input-group-addon {
+ font-size: 1.2rem;
+ font-weight:normal;
+ background-color: white;
+ border: @mild-gray 1px solid;
+ border-right: none;
+ color: @dark-gray;
+ padding-bottom: 0.4rem;
+ padding-right: 0.7rem;
+ padding-left: 0.7rem;
+ }
+
+ label:last-child, .input-group-addon:last-child {
+ border-right: @mild-gray 1px solid;
+ }
+
+ input[type="radio"] {
+ display: none;
+ }
+
+ input[type="radio"]:checked + label{
+ color: @black;
+ font-weight: bold;
+ border-bottom: @light-green 5px solid;
+ }
+}
+
+#check-advanced {
+ display: none;
+}
+
+#check-advanced:checked ~ #advanced-search-container {
+ display: block;
+}
+
+.advanced {
+ padding: 0;
+ margin-top: 0.3rem;
+ text-align: right;
+ label, select {
+ cursor: pointer;
+ }
+}
diff --git a/searx/static/themes/oscar/less/logicodev/checkbox.less b/searx/static/themes/oscar/less/logicodev/checkbox.less
new file mode 100644
index 0000000..6428b36
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/checkbox.less
@@ -0,0 +1,9 @@
+// Hide element if checkbox is checked
+input[type=checkbox]:checked + .label_hide_if_checked, input[type=checkbox]:checked + .label_hide_if_not_checked + .label_hide_if_checked {
+ display:none;
+}
+
+// Hide element if checkbox is not checked
+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;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/code.less b/searx/static/themes/oscar/less/logicodev/code.less
new file mode 100644
index 0000000..96486f5
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/code.less
@@ -0,0 +1,103 @@
+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 @orange } /* 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;
+
+ &::selection {
+ background: transparent; /* WebKit/Blink Browsers */
+ }
+ &::-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;
+}
+
+
diff --git a/searx/static/themes/oscar/less/logicodev/cursor.less b/searx/static/themes/oscar/less/logicodev/cursor.less
new file mode 100644
index 0000000..cbc1ea6
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/cursor.less
@@ -0,0 +1,8 @@
+// display cursor
+.cursor-text {
+ cursor: text !important;
+}
+
+.cursor-pointer {
+ cursor: pointer !important;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/footer.less b/searx/static/themes/oscar/less/logicodev/footer.less
new file mode 100644
index 0000000..d23a0cc
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/footer.less
@@ -0,0 +1,30 @@
+// Sticky footer styles
+*{
+ border-radius: 0 !important;
+}
+html {
+ position: relative;
+ min-height: 100%;
+ color: @black;
+}
+
+body {
+ /* Margin bottom by footer height */
+ font-family: 'Roboto', Helvetica, Arial, sans-serif;
+ margin-bottom: 80px;
+ background-color: white;
+
+ a{
+ color: @blue;
+ }
+}
+
+.footer {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ /* Set the fixed height of the footer here */
+ height: 60px;
+ text-align: center;
+ color: #999;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/infobox.less b/searx/static/themes/oscar/less/logicodev/infobox.less
new file mode 100644
index 0000000..0d488d7
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/infobox.less
@@ -0,0 +1,37 @@
+.infobox {
+
+ .panel-heading{
+ background-color: @dim-gray;
+
+ .panel-title{
+ font-weight: 700;
+ }
+ }
+
+
+ p{
+ font-family: "DejaVu Serif", Georgia, Cambria, "Times New Roman", Times, serif !important;
+ font-style: italic;
+ }
+
+ .btn{
+ background-color: @green;
+ border: none;
+
+ a{
+ color: white;
+ margin: 5px;
+ }
+ }
+
+ .infobox_part {
+ margin-bottom: 20px;
+ word-wrap: break-word;
+ table-layout: fixed;
+
+ }
+
+ .infobox_part:last-child {
+ margin-bottom: 0;
+ }
+}
diff --git a/searx/static/themes/oscar/less/logicodev/navbar.less b/searx/static/themes/oscar/less/logicodev/navbar.less
new file mode 100644
index 0000000..5da7115
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/navbar.less
@@ -0,0 +1,31 @@
+.searx-navbar {
+ background: @black;
+ height: 2.3rem;
+ font-size: 1.3rem;
+ line-height: 1.3rem;
+ padding: 0.5rem;
+ font-weight: bold;
+ margin-bottom: 0.8rem;
+
+ a, a:hover {
+ margin-right: 2.0rem;
+ color: white;
+ text-decoration: none;
+ }
+
+ .instance a {
+ color: @light-green;
+ margin-left: 2.0rem;
+ }
+}
+
+#main-logo {
+ margin-top: 20vh;
+ margin-bottom: 25px;
+
+ & > img {
+ max-width: 350px;
+ width: 80%;
+ }
+}
+
diff --git a/searx/static/themes/oscar/less/logicodev/onoff.less b/searx/static/themes/oscar/less/logicodev/onoff.less
new file mode 100644
index 0000000..f471892
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/onoff.less
@@ -0,0 +1,57 @@
+.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: @light-green;
+ 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;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/oscar.less b/searx/static/themes/oscar/less/logicodev/oscar.less
new file mode 100644
index 0000000..da80d1e
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/oscar.less
@@ -0,0 +1,23 @@
+@import "variables.less";
+
+@import "navbar.less";
+
+@import "footer.less";
+
+@import "checkbox.less";
+
+@import "onoff.less";
+
+@import "results.less";
+
+@import "infobox.less";
+
+@import "search.less";
+
+@import "advanced.less";
+
+@import "cursor.less";
+
+@import "code.less";
+
+@import "preferences.less";
diff --git a/searx/static/themes/oscar/less/logicodev/preferences.less b/searx/static/themes/oscar/less/logicodev/preferences.less
new file mode 100644
index 0000000..9672d50
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/preferences.less
@@ -0,0 +1,3 @@
+.table > tbody > tr > td, .table > tbody > tr > th {
+ vertical-align: middle !important;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/results.less b/searx/static/themes/oscar/less/logicodev/results.less
new file mode 100644
index 0000000..a64dc7d
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/results.less
@@ -0,0 +1,177 @@
+.result_header {
+ margin-top: 0px;
+ margin-bottom: 2px;
+ font-size: 16px;
+
+ .favicon {
+ margin-bottom:-3px;
+ }
+
+ a {
+ color: @black;
+ text-decoration: none;
+
+ &:hover{
+ color: @blue;
+ }
+
+ &:visited{
+ color: @violet;
+ }
+
+ .highlight {
+ background-color: @dim-gray;
+ // Chrome hack: bold is different size than normal
+ // https://stackoverflow.com/questions/20713988/weird-text-alignment-issue-in-css-when-bolded-lucida-sans
+ }
+ }
+}
+
+.result-content {
+ margin-top: 2px;
+ margin-bottom: 0;
+ word-wrap: break-word;
+ color: @dark-gray;
+ font-size: 13px;
+
+
+ .highlight {
+ font-weight:bold;
+ }
+
+}
+
+.external-link {
+ color: @dark-green;
+ font-size: 12px;
+ margin-bottom: 15px;
+
+ a {
+ margin-right: 3px;
+ }
+}
+
+// default formating of results
+.result-default, .result-code, .result-torrent, .result-videos, .result-map {
+ clear: both;
+ padding: 2px 4px;
+ &:hover{
+ background-color: @dim-gray;
+ }
+}
+
+
+// image formating of results
+.result-images {
+ float: left !important;
+ width: 24%;
+ margin: .5%;
+ a {
+ display: block;
+ width: 100%;
+ background-size: cover;
+ }
+}
+
+.img-thumbnail {
+ margin: 5px;
+ max-height: 128px;
+ min-height: 128px;
+}
+
+// video formating of results
+.result-videos {
+ clear: both;
+
+ hr{
+ margin: 5px 0 15px 0;
+ }
+
+ .collapse{
+ width: 100%;
+ }
+
+ .in{
+ margin-bottom: 8px;
+ }
+}
+
+// torrent formating of results
+.result-torrent {
+ clear: both;
+
+ b{
+ margin-right: 5px;
+ margin-left: 5px;
+ }
+
+ .seeders{
+ color: @green;
+ }
+
+ .leechers{
+ color: @red;
+ }
+}
+
+// map formating of results
+.result-map {
+ clear: both;
+}
+
+// code formating of results
+.result-code {
+ clear: both;
+
+ .code-fork, .code-fork a{
+ color: @dark-gray;
+ }
+
+}
+
+// suggestion
+.suggestion_item {
+ margin: 2px 5px;
+ max-width: 100%;
+
+ .btn {
+ max-width: 100%;
+ white-space: normal;
+ word-wrap: break-word;
+ text-align: left;
+ }
+}
+
+// download result
+.result_download {
+ margin-right: 5px;
+}
+
+// page forward, backward
+#pagination {
+ margin-top: 30px;
+ padding-bottom: 60px;
+}
+
+.label-default {
+ color: @gray;
+ 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;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/search.less b/searx/static/themes/oscar/less/logicodev/search.less
new file mode 100644
index 0000000..d65e305
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/search.less
@@ -0,0 +1,80 @@
+.search_categories, #categories {
+ text-transform: capitalize;
+ margin-bottom: 0.5rem;
+ display: flex;
+ flex-wrap: wrap;
+ flex-flow: row wrap;
+ align-content: stretch;
+
+ label, .input-group-addon {
+ flex-grow: 1;
+ flex-basis: auto;
+ font-size: 1.2rem;
+ font-weight: normal;
+ background-color: white;
+ border: @mild-gray 1px solid;
+ border-right: none;
+ color: @dark-gray;
+ padding-bottom: 0.4rem;
+ padding-top: 0.4rem;
+ text-align: center;
+ min-width: 50px;
+ }
+ label:last-child, .input-group-addon:last-child {
+ border-right: @mild-gray 1px solid;
+ }
+
+ input[type="checkbox"]:checked + label {
+ color: @black;
+ font-weight: bold;
+ border-bottom: @light-green 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: @gray;
+}
+
+ #search_form .input-group-btn .btn{
+ border-color: @gray;
+ }
+
+ #search_form .input-group-btn .btn:hover{
+ background-color: @green;
+ color: white;
+ }
+
+.custom-select {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ font-size: 1.2rem;
+ font-weight:normal;
+ background-color: white;
+ border: @mild-gray 1px solid;
+ color: @dark-gray;
+ 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;
+} \ No newline at end of file
diff --git a/searx/static/themes/oscar/less/logicodev/variables.less b/searx/static/themes/oscar/less/logicodev/variables.less
new file mode 100644
index 0000000..5966ee6
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev/variables.less
@@ -0,0 +1,13 @@
+@black: #29314D;
+@gray: #A4A4A4;
+@dim-gray: #F6F9FA;
+@dark-gray: #666;
+@middle-gray: #F5F5F5;
+@mild-gray: #DDD;
+@blue: #0088CC;
+@red: #F35E77;
+@violet: #684898;
+@dark-green: #069025;
+@green: #2ecc71;
+@light-green: #01D7D4;
+@orange: #FFA92F;
diff --git a/searx/static/themes/oscar/less/pointhi/advanced.less b/searx/static/themes/oscar/less/pointhi/advanced.less
new file mode 100644
index 0000000..23bfdb0
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/advanced.less
@@ -0,0 +1,49 @@
+#advanced-search-container {
+ display: none;
+ text-align: center;
+ margin-bottom: 1rem;
+ clear: both;
+
+ label, .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;
+ }
+
+ label:last-child, .input-group-addon:last-child {
+ border-right: #DDD 1px solid;
+ }
+
+ input[type="radio"] {
+ display: none;
+ }
+
+ 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;
+ label, select {
+ cursor: pointer;
+ }
+}
diff --git a/searx/static/themes/oscar/less/pointhi/checkbox.less b/searx/static/themes/oscar/less/pointhi/checkbox.less
new file mode 100644
index 0000000..6428b36
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/checkbox.less
@@ -0,0 +1,9 @@
+// Hide element if checkbox is checked
+input[type=checkbox]:checked + .label_hide_if_checked, input[type=checkbox]:checked + .label_hide_if_not_checked + .label_hide_if_checked {
+ display:none;
+}
+
+// Hide element if checkbox is not checked
+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;
+}
diff --git a/searx/static/themes/oscar/less/pointhi/code.less b/searx/static/themes/oscar/less/pointhi/code.less
new file mode 100644
index 0000000..90a2cd6
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/code.less
@@ -0,0 +1,79 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #408080; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #008000; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
+.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #008000 } /* Keyword.Pseudo */
+.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #B00040 } /* Keyword.Type */
+.highlight .m { color: #666666 } /* Literal.Number */
+.highlight .s { color: #BA2121 } /* Literal.String */
+.highlight .na { color: #7D9029 } /* Name.Attribute */
+.highlight .nb { color: #008000 } /* Name.Builtin */
+.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.highlight .no { color: #880000 } /* Name.Constant */
+.highlight .nd { color: #AA22FF } /* Name.Decorator */
+.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #0000FF } /* Name.Function */
+.highlight .nl { color: #A0A000 } /* Name.Label */
+.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #19177C } /* Name.Variable */
+.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #666666 } /* Literal.Number.Float */
+.highlight .mh { color: #666666 } /* Literal.Number.Hex */
+.highlight .mi { color: #666666 } /* Literal.Number.Integer */
+.highlight .mo { color: #666666 } /* Literal.Number.Oct */
+.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
+.highlight .sc { color: #BA2121 } /* Literal.String.Char */
+.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
+.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
+.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.highlight .sx { color: #008000 } /* Literal.String.Other */
+.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
+.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
+.highlight .ss { color: #19177C } /* Literal.String.Symbol */
+.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #19177C } /* Name.Variable.Class */
+.highlight .vg { color: #19177C } /* Name.Variable.Global */
+.highlight .vi { color: #19177C } /* Name.Variable.Instance */
+.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
+
+.highlight .lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: default;
+
+ &::selection {
+ background: transparent; /* WebKit/Blink Browsers */
+ }
+ &::-moz-selection {
+ background: transparent; /* Gecko Browsers */
+ }
+}
diff --git a/searx/static/themes/oscar/less/pointhi/cursor.less b/searx/static/themes/oscar/less/pointhi/cursor.less
new file mode 100644
index 0000000..cbc1ea6
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/cursor.less
@@ -0,0 +1,8 @@
+// display cursor
+.cursor-text {
+ cursor: text !important;
+}
+
+.cursor-pointer {
+ cursor: pointer !important;
+}
diff --git a/searx/static/themes/oscar/less/pointhi/footer.less b/searx/static/themes/oscar/less/pointhi/footer.less
new file mode 100644
index 0000000..0b25e73
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/footer.less
@@ -0,0 +1,19 @@
+// Sticky footer styles
+
+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;
+}
diff --git a/searx/static/themes/oscar/less/pointhi/infobox.less b/searx/static/themes/oscar/less/pointhi/infobox.less
new file mode 100644
index 0000000..41375f2
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/infobox.less
@@ -0,0 +1,11 @@
+.infobox {
+ .infobox_part {
+ margin-bottom: 20px;
+ word-wrap: break-word;
+ table-layout: fixed;
+ }
+
+ .infobox_part:last-child {
+ margin-bottom: 0;
+ }
+}
diff --git a/searx/static/themes/oscar/less/pointhi/navbar.less b/searx/static/themes/oscar/less/pointhi/navbar.less
new file mode 100644
index 0000000..a057f82
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/navbar.less
@@ -0,0 +1,20 @@
+.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;
+
+ a, a:hover {
+ margin-right: 2.0rem;
+ text-decoration: none;
+ }
+
+ .instance a {
+ color: #444;
+ margin-left: 2.0rem;
+ }
+}
diff --git a/searx/static/themes/oscar/less/pointhi/onoff.less b/searx/static/themes/oscar/less/pointhi/onoff.less
new file mode 100644
index 0000000..72b289a
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/onoff.less
@@ -0,0 +1,57 @@
+.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;
+}
diff --git a/searx/static/themes/oscar/less/pointhi/oscar.less b/searx/static/themes/oscar/less/pointhi/oscar.less
new file mode 100644
index 0000000..fc1c525
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/oscar.less
@@ -0,0 +1,21 @@
+@import "footer.less";
+
+@import "checkbox.less";
+
+@import "onoff.less";
+
+@import "results.less";
+
+@import "infobox.less";
+
+@import "search.less";
+
+@import "advanced.less";
+
+@import "cursor.less";
+
+@import "code.less";
+
+@import "navbar.less";
+
+@import "preferences.less";
diff --git a/searx/static/themes/oscar/less/pointhi/preferences.less b/searx/static/themes/oscar/less/pointhi/preferences.less
new file mode 100644
index 0000000..9672d50
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/preferences.less
@@ -0,0 +1,3 @@
+.table > tbody > tr > td, .table > tbody > tr > th {
+ vertical-align: middle !important;
+}
diff --git a/searx/static/themes/oscar/less/pointhi/results.less b/searx/static/themes/oscar/less/pointhi/results.less
new file mode 100644
index 0000000..13266c0
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/results.less
@@ -0,0 +1,109 @@
+
+.result_header {
+ margin-bottom:5px;
+ margin-top:20px;
+
+ .favicon {
+ margin-bottom:-3px;
+ }
+
+ a {
+ vertical-align: bottom;
+
+ .highlight {
+ font-weight:bold;
+ }
+ }
+}
+
+.result-content {
+ margin-top: 5px;
+ word-wrap: break-word;
+
+ .highlight {
+ font-weight:bold;
+ }
+}
+
+// default formating of results
+.result-default {
+ clear: both;
+}
+
+// image formating of results
+.result-images {
+ float: left !important;
+ height: 138px;
+}
+
+.img-thumbnail {
+ margin: 5px;
+ max-height: 128px;
+}
+
+// video formating of results
+.result-videos {
+ clear: both;
+}
+
+// torrent formating of results
+.result-torrents {
+ clear: both;
+}
+
+// map formating of results
+.result-map {
+ clear: both;
+}
+
+// code formating of results
+.result-code {
+ clear: both;
+}
+
+// suggestion
+.suggestion_item {
+ margin: 2px 5px;
+ max-width: 100%;
+
+ .btn {
+ max-width: 100%;
+ white-space: normal;
+ word-wrap: break-word;
+ text-align: left;
+ }
+}
+
+// download result
+.result_download {
+ margin-right: 5px;
+}
+
+// page forward, backward
+#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;
+}
diff --git a/searx/static/themes/oscar/less/pointhi/search.less b/searx/static/themes/oscar/less/pointhi/search.less
new file mode 100644
index 0000000..5ff7336
--- /dev/null
+++ b/searx/static/themes/oscar/less/pointhi/search.less
@@ -0,0 +1,33 @@
+.search_categories, #categories {
+ text-transform: capitalize;
+ margin-bottom: 1.5rem;
+ margin-top: 1.5rem;
+ display: flex;
+ flex-wrap: wrap;
+ align-content: stretch;
+
+ label, .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;
+ }
+
+ label:last-child, .input-group-addon:last-child {
+ border-right: #DDD 1px solid;
+ }
+
+ input[type="checkbox"]:checked + label{
+ color: black;
+ font-weight: bold;
+ background-color: #EEE;
+ }
+}
diff --git a/searx/static/themes/oscar/package.json b/searx/static/themes/oscar/package.json
new file mode 100644
index 0000000..7eae9df
--- /dev/null
+++ b/searx/static/themes/oscar/package.json
@@ -0,0 +1,16 @@
+{
+ "devDependencies": {
+ "grunt": "~0.4.5",
+ "grunt-contrib-uglify": "~0.6.0",
+ "grunt-contrib-watch" : "~0.6.1",
+ "grunt-contrib-concat" : "~0.5.0",
+ "grunt-contrib-jshint" : "~0.10.0",
+ "grunt-contrib-less" : "~0.11.0"
+ },
+
+ "scripts": {
+ "build": "npm install && grunt",
+ "start": "grunt watch",
+ "test": "grunt"
+ }
+}