From 9b3efa6d8ab46a3db62f42624d7e9f4b55fdd0ef Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Sat, 7 May 2022 15:11:05 +0200 Subject: [PATCH] theme: remove __common__ --- searx/plugins/search_on_category_select.py | 2 - searx/plugins/vim_hotkeys.py | 3 - searx/static/plugins/css/vim_hotkeys.css | 26 -- .../plugins/js/search_on_category_select.js | 42 --- searx/static/plugins/js/vim_hotkeys.js | 345 ------------------ .../themes/__common__/less/new_issue.less | 19 - .../__common__/less/result_templates.less | 5 - .../static/themes/__common__/less/stats.less | 83 ----- .../static/themes/{ => simple}/.gitattributes | 0 searx/static/themes/simple/gruntfile.js | 3 +- .../themes/simple/src/less/new_issue.less | 21 ++ .../simple/src/less/result_templates.less | 7 + .../static/themes/simple/src/less/stats.less | 77 ++++ .../themes/simple/src/less/style-rtl.less | 2 +- .../static/themes/simple/src/less/style.less | 6 +- .../{__common__ => simple}/new_issue.html | 0 .../{__common__ => simple}/opensearch.xml | 0 .../opensearch_response_rss.xml | 0 searx/templates/simple/search.html | 2 +- .../searxng-wordmark.min.svg | 0 searx/templates/simple/stats.html | 2 +- searx/webapp.py | 64 +--- searx/webutils.py | 5 +- tests/unit/test_webapp.py | 13 +- utils/lib_static.sh | 2 +- 25 files changed, 141 insertions(+), 588 deletions(-) delete mode 100644 searx/static/plugins/css/vim_hotkeys.css delete mode 100644 searx/static/plugins/js/search_on_category_select.js delete mode 100644 searx/static/plugins/js/vim_hotkeys.js delete mode 100644 searx/static/themes/__common__/less/new_issue.less delete mode 100644 searx/static/themes/__common__/less/result_templates.less delete mode 100644 searx/static/themes/__common__/less/stats.less rename searx/static/themes/{ => simple}/.gitattributes (100%) create mode 100644 searx/static/themes/simple/src/less/new_issue.less create mode 100644 searx/static/themes/simple/src/less/result_templates.less create mode 100644 searx/static/themes/simple/src/less/stats.less rename searx/templates/{__common__ => simple}/new_issue.html (100%) rename searx/templates/{__common__ => simple}/opensearch.xml (100%) rename searx/templates/{__common__ => simple}/opensearch_response_rss.xml (100%) rename searx/templates/{__common__ => simple}/searxng-wordmark.min.svg (100%) diff --git a/searx/plugins/search_on_category_select.py b/searx/plugins/search_on_category_select.py index 48d537ce..99066e23 100644 --- a/searx/plugins/search_on_category_select.py +++ b/searx/plugins/search_on_category_select.py @@ -22,5 +22,3 @@ description = gettext( ) default_on = True preference_section = 'ui' - -js_dependencies = ('plugins/js/search_on_category_select.js',) diff --git a/searx/plugins/vim_hotkeys.py b/searx/plugins/vim_hotkeys.py index fb61d413..3eeaf8c0 100644 --- a/searx/plugins/vim_hotkeys.py +++ b/searx/plugins/vim_hotkeys.py @@ -8,6 +8,3 @@ description = gettext( ) default_on = False preference_section = 'ui' - -js_dependencies = ('plugins/js/vim_hotkeys.js',) -css_dependencies = ('plugins/css/vim_hotkeys.css',) diff --git a/searx/static/plugins/css/vim_hotkeys.css b/searx/static/plugins/css/vim_hotkeys.css deleted file mode 100644 index 2ccfdc1a..00000000 --- a/searx/static/plugins/css/vim_hotkeys.css +++ /dev/null @@ -1,26 +0,0 @@ -.vim-hotkeys-help { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 9999999; - overflow-y: auto; - max-height: 80%; - box-shadow: 0 0 1em; -} - -.dflex { - display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ - display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ - display: -ms-flexbox; /* TWEENER - IE 10 */ - display: -webkit-flex; /* NEW - Chrome */ - display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */ -} - -.iflex { - -webkit-box-flex: 1; /* OLD - iOS 6-, Safari 3.1-6 */ - -moz-box-flex: 1; /* OLD - Firefox 19- */ - -webkit-flex: 1; /* Chrome */ - -ms-flex: 1; /* IE 10 */ - flex: 1; /* NEW, Spec - Opera 12.1, Firefox 20+ */ -} diff --git a/searx/static/plugins/js/search_on_category_select.js b/searx/static/plugins/js/search_on_category_select.js deleted file mode 100644 index d590ed12..00000000 --- a/searx/static/plugins/js/search_on_category_select.js +++ /dev/null @@ -1,42 +0,0 @@ -$(document).ready(function() { - if($('#q').length) { - $('#categories label').click(function(e) { - $('#categories input[type="checkbox"]').each(function(i, checkbox) { - $(checkbox).prop('checked', false); - }); - $(document.getElementById($(this).attr("for"))).prop('checked', true); - if($('#q').val()) { - if (getHttpRequest() == "GET") { - $('#search_form').attr('action', $('#search_form').serialize()); - } - $('#search_form').submit(); - } - return false; - }); - $('#time-range').change(function(e) { - if($('#q').val()) { - if (getHttpRequest() == "GET") { - $('#search_form').attr('action', $('#search_form').serialize()); - } - $('#search_form').submit(); - } - }); - $('#language').change(function(e) { - if($('#q').val()) { - if (getHttpRequest() == "GET") { - $('#search_form').attr('action', $('#search_form').serialize()); - } - $('#search_form').submit(); - } - }); - } -}); - -function getHttpRequest() { - httpRequest = "POST"; - urlParams = new URLSearchParams(window.location.search); - if (urlParams.has('method')) { - httpRequest = urlParams.get('method'); - } - return httpRequest; -} diff --git a/searx/static/plugins/js/vim_hotkeys.js b/searx/static/plugins/js/vim_hotkeys.js deleted file mode 100644 index b0f265cb..00000000 --- a/searx/static/plugins/js/vim_hotkeys.js +++ /dev/null @@ -1,345 +0,0 @@ -$(document).ready(function() { - highlightResult('top')(); - - $('.result').on('click', function() { - highlightResult($(this))(); - }); - - var vimKeys = { - 27: { - key: 'Escape', - fun: removeFocus, - des: 'remove focus from the focused input', - cat: 'Control' - }, - 73: { - key: 'i', - fun: searchInputFocus, - des: 'focus on the search input', - cat: 'Control' - }, - 66: { - key: 'b', - fun: scrollPage(-window.innerHeight), - des: 'scroll one page up', - cat: 'Navigation' - }, - 70: { - key: 'f', - fun: scrollPage(window.innerHeight), - des: 'scroll one page down', - cat: 'Navigation' - }, - 85: { - key: 'u', - fun: scrollPage(-window.innerHeight / 2), - des: 'scroll half a page up', - cat: 'Navigation' - }, - 68: { - key: 'd', - fun: scrollPage(window.innerHeight / 2), - des: 'scroll half a page down', - cat: 'Navigation' - }, - 71: { - key: 'g', - fun: scrollPageTo(-document.body.scrollHeight, 'top'), - des: 'scroll to the top of the page', - cat: 'Navigation' - }, - 86: { - key: 'v', - fun: scrollPageTo(document.body.scrollHeight, 'bottom'), - des: 'scroll to the bottom of the page', - cat: 'Navigation' - }, - 75: { - key: 'k', - fun: highlightResult('up'), - des: 'select previous search result', - cat: 'Results' - }, - 74: { - key: 'j', - fun: highlightResult('down'), - des: 'select next search result', - cat: 'Results' - }, - 80: { - key: 'p', - fun: pageButtonClick(0), - des: 'go to previous page', - cat: 'Results' - }, - 78: { - key: 'n', - fun: pageButtonClick(1), - des: 'go to next page', - cat: 'Results' - }, - 79: { - key: 'o', - fun: openResult(false), - des: 'open search result', - cat: 'Results' - }, - 84: { - key: 't', - fun: openResult(true), - des: 'open the result in a new tab', - cat: 'Results' - }, - 82: { - key: 'r', - fun: reloadPage, - des: 'reload page from the server', - cat: 'Control' - }, - 72: { - key: 'h', - fun: toggleHelp, - des: 'toggle help window', - cat: 'Other' - } - }; - - $(document).keydown(function(e) { - // check for modifiers so we don't break browser's hotkeys - if (vimKeys.hasOwnProperty(e.keyCode) - && !e.ctrlKey - && !e.altKey - && !e.shiftKey - && !e.metaKey) - { - if (e.keyCode === 27) { - if (e.target.tagName.toLowerCase() === 'input') { - vimKeys[e.keyCode].fun(); - } - } else { - if (e.target === document.body) { - e.preventDefault(); - vimKeys[e.keyCode].fun(); - } - } - } - }); - - function nextResult(current, direction) { - var next = current[direction](); - while (!next.is('.result') && next.length !== 0) { - next = next[direction](); - } - return next - } - - function highlightResult(which) { - return function() { - var current = $('.result[data-vim-selected]'); - if (current.length === 0) { - current = $('.result:first'); - if (current.length === 0) { - return; - } - } - - var next; - - if (typeof which !== 'string') { - next = which; - } else { - switch (which) { - case 'visible': - var top = $(window).scrollTop(); - var bot = top + $(window).height(); - var results = $('.result'); - - for (var i = 0; i < results.length; i++) { - next = $(results[i]); - var etop = next.offset().top; - var ebot = etop + next.height(); - - if ((ebot <= bot) && (etop > top)) { - break; - } - } - break; - case 'down': - next = nextResult(current, 'next'); - if (next.length === 0) { - next = $('.result:first'); - } - break; - case 'up': - next = nextResult(current, 'prev'); - if (next.length === 0) { - next = $('.result:last'); - } - break; - case 'bottom': - next = $('.result:last'); - break; - case 'top': - default: - next = $('.result:first'); - } - } - - if (next) { - current.removeAttr('data-vim-selected').removeClass('well well-sm'); - next.attr('data-vim-selected', 'true').addClass('well well-sm'); - scrollPageToSelected(); - } - } - } - - function reloadPage() { - document.location.reload(false); - } - - function removeFocus() { - if (document.activeElement) { - document.activeElement.blur(); - } - } - - function pageButtonClick(num) { - return function() { - var buttons = $('div#pagination button[type="submit"]'); - if (buttons.length !== 2) { - console.log('page navigation with this theme is not supported'); - return; - } - if (num >= 0 && num < buttons.length) { - buttons[num].click(); - } else { - console.log('pageButtonClick(): invalid argument'); - } - } - } - - function scrollPageToSelected() { - var sel = $('.result[data-vim-selected]'); - if (sel.length !== 1) { - return; - } - - var wnd = $(window); - - var wtop = wnd.scrollTop(); - var etop = sel.offset().top; - - var offset = 30; - - if (wtop > etop) { - wnd.scrollTop(etop - offset); - } else { - var ebot = etop + sel.height(); - var wbot = wtop + wnd.height(); - - if (wbot < ebot) { - wnd.scrollTop(ebot - wnd.height() + offset); - } - } - } - - function scrollPage(amount) { - return function() { - window.scrollBy(0, amount); - highlightResult('visible')(); - } - } - - function scrollPageTo(position, nav) { - return function() { - window.scrollTo(0, position); - highlightResult(nav)(); - } - } - - function searchInputFocus() { - $('input#q').focus(); - } - - function openResult(newTab) { - return function() { - var link = $('.result[data-vim-selected] .result_header a'); - if (link.length) { - var url = link.attr('href'); - if (newTab) { - window.open(url); - } else { - window.location.href = url; - } - } - }; - } - - function toggleHelp() { - var helpPanel = $('#vim-hotkeys-help'); - if (helpPanel.length) { - helpPanel.toggleClass('hidden'); - return; - } - - var categories = {}; - - for (var k in vimKeys) { - var key = vimKeys[k]; - categories[key.cat] = categories[key.cat] || []; - categories[key.cat].push(key); - } - - var sorted = Object.keys(categories).sort(function(a, b) { - return categories[b].length - categories[a].length; - }); - - if (sorted.length === 0) { - return; - } - - var html = '
'; - html += '
'; - - html += '
'; - html += '
'; - html += '

How to navigate searx with Vim-like hotkeys

'; - html += '
'; // col-sm-12 - html += '
'; // row - - for (var i = 0; i < sorted.length; i++) { - var cat = categories[sorted[i]]; - - var lastCategory = i === (sorted.length - 1); - var first = i % 2 === 0; - - if (first) { - html += '
'; - } - html += '
'; - - html += '
'; - html += '
' + cat[0].cat + '
'; - html += '
'; - html += '
    '; - - for (var cj in cat) { - html += '
  • ' + cat[cj].key + ' ' + cat[cj].des + '
  • '; - } - - html += '
'; - html += '
'; // panel-body - html += '
'; // panel - html += '
'; // col-sm-* - - if (!first || lastCategory) { - html += '
'; // row - } - } - - html += '
'; // container-fluid - html += '
'; // vim-hotkeys-help - - $('body').append(html); - } -}); diff --git a/searx/static/themes/__common__/less/new_issue.less b/searx/static/themes/__common__/less/new_issue.less deleted file mode 100644 index 175bd3ce..00000000 --- a/searx/static/themes/__common__/less/new_issue.less +++ /dev/null @@ -1,19 +0,0 @@ -.github-issue-button { - display: block; - padding: 8px 16px; - font-family: sans-serif; - font-size: 16px; - color: white; - background-color: #238636 !important; /* important is needed cause to an !important in logicodev-dark */ - border: #2ea043; - border-radius: 10px !important; - box-shadow: rgba(0, 0, 0, 0) 0px 0px 0px 0px; -} - -.github-issue-button:hover { - background-color: #2ea043; -} - -.issue-hide { - display: none; -} diff --git a/searx/static/themes/__common__/less/result_templates.less b/searx/static/themes/__common__/less/result_templates.less deleted file mode 100644 index d67aecae..00000000 --- a/searx/static/themes/__common__/less/result_templates.less +++ /dev/null @@ -1,5 +0,0 @@ -.osm-map-box { - height:300px; - width:100%; - margin: 10px 0; -} diff --git a/searx/static/themes/__common__/less/stats.less b/searx/static/themes/__common__/less/stats.less deleted file mode 100644 index 687d1590..00000000 --- a/searx/static/themes/__common__/less/stats.less +++ /dev/null @@ -1,83 +0,0 @@ -.engine-stats { - - .engine-name { - width: 20rem; - } - - .engine-score { - width: 7rem; - text-align: right; - } - - .result-count { - } - - .response-time { - } - - .engine-reliability { - text-align: right; - } - - table.engine-error { - max-width: 1280px; - margin: 1rem; - border: 1px solid gray; - } - - table.engine-error th.engine-error-type, - table.engine-error td.engine-error-type, - failed-test { - width: 10rem; - } - - table.engine-error span.log_parameters - { - border-right: 1px solid gray; - padding: 0 1rem 0 0; - margin: 0 0 0 0.5rem; - } -} - -.bar-chart-value { - width: 3em; - display: inline-block; - text-align: right; - padding-right: 0.5rem; -} - -.bar-chart-graph { - width: calc(100% - 5rem); - display: inline-block; -} - -.bar-chart-bar { - border: 3px solid #5bc0de; - margin: 1px 0; -} - -.bar-chart-serie1 { - border: 3px solid #5bc0de; - margin: 1px 0; - float: left; -} - -.bar-chart-serie2 { - border: 3px solid #deb15b; - margin: 1px 0; - float: left; -} - -.bar0{ - width: 0; - border: 0; -} - -.generate-bar(100); - -.generate-bar(@n, @i: 1) when (@i =< @n) { - .bar@{i} { - width: (@i * 100% / @n); - } - .generate-bar(@n, (@i + 1)); -} diff --git a/searx/static/themes/.gitattributes b/searx/static/themes/simple/.gitattributes similarity index 100% rename from searx/static/themes/.gitattributes rename to searx/static/themes/simple/.gitattributes diff --git a/searx/static/themes/simple/gruntfile.js b/searx/static/themes/simple/gruntfile.js index 25883e38..50ea3b1d 100644 --- a/searx/static/themes/simple/gruntfile.js +++ b/searx/static/themes/simple/gruntfile.js @@ -44,7 +44,6 @@ module.exports = function (grunt) { 'svg4web.svgo.js', 'src/js/main/*.js', 'src/js/head/*.js', - '../__common__/js/*.js' ], }, stylelint: { @@ -146,7 +145,7 @@ module.exports = function (grunt) { svgo: ['--config', 'svg4web.svgo.js'] }, files: { - '<%= _templates %>/__common__/searxng-wordmark.min.svg': '<%= _brand %>/searxng-wordmark.svg', + '<%= _templates %>/simple/searxng-wordmark.min.svg': '<%= _brand %>/searxng-wordmark.svg', 'img/searxng.svg': '<%= _brand %>/searxng.svg', 'img/img_load_error.svg': '<%= _brand %>/img_load_error.svg' } diff --git a/searx/static/themes/simple/src/less/new_issue.less b/searx/static/themes/simple/src/less/new_issue.less new file mode 100644 index 00000000..83d53b5e --- /dev/null +++ b/searx/static/themes/simple/src/less/new_issue.less @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +.github-issue-button { + display: block; + padding: 8px 16px; + font-family: sans-serif; + font-size: 16px; + color: white; + background-color: #238636; + border: #2ea043; + border-radius: 10px !important; + box-shadow: rgba(0, 0, 0, 0) 0 0 0 0; +} + +.github-issue-button:hover { + background-color: #2ea043; +} + +.issue-hide { + display: none; +} diff --git a/searx/static/themes/simple/src/less/result_templates.less b/searx/static/themes/simple/src/less/result_templates.less new file mode 100644 index 00000000..afabdf32 --- /dev/null +++ b/searx/static/themes/simple/src/less/result_templates.less @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +.osm-map-box { + height: 300px; + width: 100%; + margin: 10px 0; +} diff --git a/searx/static/themes/simple/src/less/stats.less b/searx/static/themes/simple/src/less/stats.less new file mode 100644 index 00000000..0e54e270 --- /dev/null +++ b/searx/static/themes/simple/src/less/stats.less @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +.engine-stats { + .engine-name { + width: 20rem; + } + + .engine-score { + width: 7rem; + text-align: right; + } + + .engine-reliability { + text-align: right; + } + + table.engine-error { + max-width: 1280px; + margin: 1rem; + border: 1px solid gray; + } + + table.engine-error th.engine-error-type, + table.engine-error td.engine-error-type, + failed-test { + width: 10rem; + } + + table.engine-error span.log_parameters { + border-right: 1px solid gray; + padding: 0 1rem 0 0; + margin: 0 0 0 0.5rem; + } +} + +.bar-chart-value { + width: 3em; + display: inline-block; + text-align: right; + padding-right: 0.5rem; +} + +.bar-chart-graph { + width: calc(100% - 5rem); + display: inline-block; +} + +.bar-chart-bar { + border: 3px solid #5bc0de; + margin: 1px 0; +} + +.bar-chart-serie1 { + border: 3px solid #5bc0de; + margin: 1px 0; + float: left; +} + +.bar-chart-serie2 { + border: 3px solid #deb15b; + margin: 1px 0; + float: left; +} + +.bar0 { + width: 0; + border: 0; +} + +.generate-bar(100); + +.generate-bar(@n, @i: 1) when (@i =< @n) { + .bar@{i} { + width: (@i * 100% / @n); + } + .generate-bar(@n, (@i + 1)); +} diff --git a/searx/static/themes/simple/src/less/style-rtl.less b/searx/static/themes/simple/src/less/style-rtl.less index bbaa4874..cf105702 100644 --- a/searx/static/themes/simple/src/less/style-rtl.less +++ b/searx/static/themes/simple/src/less/style-rtl.less @@ -124,7 +124,7 @@ background-position-x: 100%; } -// patch of searx/static/themes/__common__/less/stats.less +// patch of stats.less .bar-chart-serie1, .bar-chart-serie2 { float: right; diff --git a/searx/static/themes/simple/src/less/style.less b/searx/static/themes/simple/src/less/style.less index 258c222a..38fdeaa1 100644 --- a/searx/static/themes/simple/src/less/style.less +++ b/searx/static/themes/simple/src/less/style.less @@ -6,9 +6,6 @@ // stylelint-disable no-descending-specificity -@import "../../__common__/less/new_issue.less"; -@import "../../__common__/less/stats.less"; -@import "../../__common__/less/result_templates.less"; @import (inline) "../../node_modules/normalize.css/normalize.css"; @import "definitions.less"; @import "mixins.less"; @@ -19,6 +16,9 @@ @import "animations.less"; @import "embedded.less"; @import "info.less"; +@import "new_issue.less"; +@import "stats.less"; +@import "result_templates.less"; // for index.html template @import "index.less"; diff --git a/searx/templates/__common__/new_issue.html b/searx/templates/simple/new_issue.html similarity index 100% rename from searx/templates/__common__/new_issue.html rename to searx/templates/simple/new_issue.html diff --git a/searx/templates/__common__/opensearch.xml b/searx/templates/simple/opensearch.xml similarity index 100% rename from searx/templates/__common__/opensearch.xml rename to searx/templates/simple/opensearch.xml diff --git a/searx/templates/__common__/opensearch_response_rss.xml b/searx/templates/simple/opensearch_response_rss.xml similarity index 100% rename from searx/templates/__common__/opensearch_response_rss.xml rename to searx/templates/simple/opensearch_response_rss.xml diff --git a/searx/templates/simple/search.html b/searx/templates/simple/search.html index 90a296ae..c5f7de09 100644 --- a/searx/templates/simple/search.html +++ b/searx/templates/simple/search.html @@ -2,7 +2,7 @@