From fd374d6322c6f0919832b6465bc311dac68bb753 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Sat, 2 Oct 2021 11:57:08 +0200 Subject: [PATCH 1/2] [enh] simple theme: image detail When an image is selected, the detail with the full size image is displayed on the right side of the screen (or full screen on tablet and phone). When Javascript is disabled, the thumbnail is a linked to the full size image, as it was before. When the image proxy is enabled, the full size image is also proxied, in consequence this commit increases the bandwidth usage of instances. The detail can be closed by the close button or the Esc key. It is possible to go to the next and previous images using the j and k keys or the button on the top right of the screen. --- .../themes/__common__/js/image_layout.js | 15 +- .../themes/oscar/src/js/element_modifiers.js | 2 +- .../simple/src/js/main/searx_keyboard.js | 20 +- .../simple/src/js/main/searx_results.js | 75 +++++- .../themes/simple/src/less/definitions.less | 20 +- .../static/themes/simple/src/less/detail.less | 243 ++++++++++++++++++ .../static/themes/simple/src/less/style.less | 16 +- .../simple/result_templates/images.html | 30 ++- 8 files changed, 390 insertions(+), 31 deletions(-) create mode 100644 searx/static/themes/simple/src/less/detail.less diff --git a/searx/static/themes/__common__/js/image_layout.js b/searx/static/themes/__common__/js/image_layout.js index fa96f62c..653da95a 100644 --- a/searx/static/themes/__common__/js/image_layout.js +++ b/searx/static/themes/__common__/js/image_layout.js @@ -11,11 +11,12 @@ */ (function (w, d) { - function ImageLayout(container_selector, results_selector, img_selector, margin, maxHeight) { + function ImageLayout(container_selector, results_selector, img_selector, verticalMargin, horizontalMargin, maxHeight) { this.container_selector = container_selector; this.results_selector = results_selector; this.img_selector = img_selector; - this.margin = margin; + this.verticalMargin = verticalMargin; + this.horizontalMargin = horizontalMargin; this.maxHeight = maxHeight; this.isAlignDone = true; } @@ -45,7 +46,7 @@ } } - return (width - images.length * this.margin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3 + return (width - images.length * this.verticalMargin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3 }; ImageLayout.prototype._setSize = function (images, height) { @@ -62,10 +63,10 @@ } img.style.width = imgWidth + 'px'; img.style.height = height + 'px'; - img.style.marginLeft = '3px'; - img.style.marginTop = '3px'; - img.style.marginRight = this.margin - 7 + 'px'; // -4 is the negative margin of the inline element - img.style.marginBottom = this.margin - 7 + 'px'; + img.style.marginLeft = this.horizontalMargin + 'px'; + img.style.marginTop = this.horizontalMargin + 'px'; + img.style.marginRight = this.verticalMargin - 7 + 'px'; // -4 is the negative margin of the inline element + img.style.marginBottom = this.verticalMargin - 7 + 'px'; resultNode = img.parentNode.parentNode; if (!resultNode.classList.contains('js')) { resultNode.classList.add('js'); diff --git a/searx/static/themes/oscar/src/js/element_modifiers.js b/searx/static/themes/oscar/src/js/element_modifiers.js index e9de297e..dff1a5e9 100644 --- a/searx/static/themes/oscar/src/js/element_modifiers.js +++ b/searx/static/themes/oscar/src/js/element_modifiers.js @@ -103,6 +103,6 @@ $(document).ready(function(){ /** * Layout images according to their sizes */ - searxng.image_thumbnail_layout = new searxng.ImageLayout('#main_results', '#main_results .result-images', 'img.img-thumbnail', 15, 200); + searxng.image_thumbnail_layout = new searxng.ImageLayout('#main_results', '#main_results .result-images', 'img.img-thumbnail', 15, 3, 200); searxng.image_thumbnail_layout.watch(); }); diff --git a/searx/static/themes/simple/src/js/main/searx_keyboard.js b/searx/static/themes/simple/src/js/main/searx_keyboard.js index c00a1a45..394f9773 100644 --- a/searx/static/themes/simple/src/js/main/searx_keyboard.js +++ b/searx/static/themes/simple/src/js/main/searx_keyboard.js @@ -4,7 +4,7 @@ searxng.ready(function() { searxng.on('.result', 'click', function() { - highlightResult(this)(true); + highlightResult(this)(true); }); searxng.on('.result a', 'focus', function(e) { @@ -124,9 +124,7 @@ searxng.ready(function() { if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) { var tagName = e.target.tagName.toLowerCase(); if (e.keyCode === 27) { - if (tagName === 'input' || tagName === 'select' || tagName === 'textarea') { - vimKeys[e.keyCode].fun(); - } + vimKeys[e.keyCode].fun(e); } else { if (e.target === document.body || tagName === 'a' || tagName === 'button') { e.preventDefault(); @@ -213,9 +211,12 @@ searxng.ready(function() { document.location.reload(true); } - function removeFocus() { - if (document.activeElement) { + function removeFocus(e) { + const tagName = e.target.tagName.toLowerCase(); + if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) { document.activeElement.blur(); + } else { + searxng.closeDetail(); } } @@ -285,6 +286,9 @@ searxng.ready(function() { function openResult(newTab) { return function() { var link = document.querySelector('.result[data-vim-selected] h3 a'); + if (link === null) { + link = document.querySelector('.result[data-vim-selected] > a'); + } if (link !== null) { var url = link.getAttribute('href'); if (newTab) { @@ -368,4 +372,8 @@ searxng.ready(function() { return; } } + + searxng.scrollPageToSelected = scrollPageToSelected; + searxng.selectNext = highlightResult('down'); + searxng.selectPrevious = highlightResult('up'); }); diff --git a/searx/static/themes/simple/src/js/main/searx_results.js b/searx/static/themes/simple/src/js/main/searx_results.js index 79af25af..5ccbb38b 100644 --- a/searx/static/themes/simple/src/js/main/searx_results.js +++ b/searx/static/themes/simple/src/js/main/searx_results.js @@ -3,7 +3,7 @@ 'use strict'; searxng.ready(function() { - searxng.image_thumbnail_layout = new searxng.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 10, 200); + searxng.image_thumbnail_layout = new searxng.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 14, 6, 200); searxng.image_thumbnail_layout.watch(); searxng.on('.btn-collapse', 'click', function() { @@ -31,17 +31,74 @@ } }); - w.addEventListener('scroll', function() { - var e = d.getElementById('backToTop'), - scrollTop = document.documentElement.scrollTop || document.body.scrollTop; - if (e !== null) { - if (scrollTop >= 200) { - e.style.opacity = 1; - } else { - e.style.opacity = 0; + function selectImage(e) { + /*eslint no-unused-vars: 0*/ + let t = e.target; + while (t && t.nodeName != 'ARTICLE') { + t = t.parentNode; + } + if (t) { + // load full size image in background + const imgElement = t.querySelector('.result-images-source img'); + const thumbnailElement = t.querySelector('.image_thumbnail'); + const detailElement = t.querySelector('.detail'); + if (imgElement) { + const imgSrc = imgElement.getAttribute('data-src'); + if (imgSrc) { + const loader = d.createElement('div'); + const imgLoader = new Image(); + + loader.classList.add('loader'); + detailElement.appendChild(loader); + + imgLoader.onload = e => { + imgElement.src = imgSrc; + loader.remove(); + }; + imgLoader.onerror = e => { + loader.remove(); + }; + imgLoader.src = imgSrc; + imgElement.src = thumbnailElement.src; + imgElement.removeAttribute('data-src'); + } } } + d.getElementById('results').classList.add('image-detail-open'); + searxng.image_thumbnail_layout.align(); + searxng.scrollPageToSelected(); + } + + searxng.closeDetail = function(e) { + d.getElementById('results').classList.remove('image-detail-open'); + searxng.image_thumbnail_layout.align(); + searxng.scrollPageToSelected(); + } + + searxng.on('.result-images', 'click', e => { + e.preventDefault(); + selectImage(e); }); + searxng.on('.result-images a', 'focus', selectImage, true); + searxng.on('.result-detail-close', 'click', e => { + e.preventDefault(); + searxng.closeDetail(); + }); + searxng.on('.result-detail-previous', 'click', e => searxng.selectPrevious(false)); + searxng.on('.result-detail-next', 'click', e => searxng.selectNext(false)); + + w.addEventListener('scroll', function() { + var e = d.getElementById('backToTop'), + scrollTop = document.documentElement.scrollTop || document.body.scrollTop, + results = d.getElementById('results'); + if (e !== null) { + if (scrollTop >= 100) { + results.classList.add('scrolling'); + } else { + results.classList.remove('scrolling'); + } + } + }, true); }); diff --git a/searx/static/themes/simple/src/less/definitions.less b/searx/static/themes/simple/src/less/definitions.less index 9caf4f3f..6a199b56 100644 --- a/searx/static/themes/simple/src/less/definitions.less +++ b/searx/static/themes/simple/src/less/definitions.less @@ -71,6 +71,14 @@ html { /// Settings Colors --color-settings-tr-hover: #f7f7f7; --color-settings-engine-description-font: darken(#dcdcdc, 30%); + /// Detail modal + --color-result-detail-font: #fff; + --color-result-detail-label-font: lightgray; + --color-result-detail-background: #000; + --color-result-detail-hr: #333; + --color-result-detail-link: #8af; + --color-result-detail-loader-border: rgba(255, 255, 255, 0.2); + --color-result-detail-loader-borderleft: rgba(0, 0, 0, 0); /// Toolkit Colors --color-toolkit-badge-font: #fff; --color-toolkit-badge-background: #777; @@ -156,6 +164,14 @@ html { --color-result-engines-font: #777; --color-result-search-url-border: #333; --color-result-search-url-font: #fff; + /// Detail modal : same as the light version + --color-result-detail-font: #fff; + --color-result-detail-label-font: lightgray; + --color-result-detail-background: #000; + --color-result-detail-hr: #333; + --color-result-detail-link: #8af; + --color-result-detail-loader-border: rgba(255, 255, 255, 0.2); + --color-result-detail-loader-borderleft: rgba(0, 0, 0, 0); // Images Colors --color-result-image-span-background-hover: rgba(0, 0, 0, 0.6); --color-result-image-span-font: #fff; @@ -183,8 +199,8 @@ html { --color-toolkit-engine-tooltip-border: #333; --color-toolkit-engine-tooltip-shadow: #444; --color-toolkit-engine-tooltip-background: #222; - --color-toolkit-loader-border: rgba(0, 0, 0, 0.2); - --color-toolkit-loader-borderleft: rgba(255, 255, 255, 0); + --color-toolkit-loader-border: rgba(255, 255, 255, 0.2); + --color-toolkit-loader-borderleft: rgba(0, 0, 0, 0); } } diff --git a/searx/static/themes/simple/src/less/detail.less b/searx/static/themes/simple/src/less/detail.less new file mode 100644 index 00000000..6c402276 --- /dev/null +++ b/searx/static/themes/simple/src/less/detail.less @@ -0,0 +1,243 @@ +#main_results #results.image-detail-open.only_template_images { + width: 59.25rem !important; +} + +#main_results #results.only_template_images.image-detail-open #backToTop { + left: 56.75rem !important; + right: inherit; +} + +article.result-images .detail { + display: none; +} + +#results.image-detail-open article.result-images[data-vim-selected] .detail { + display: flex; + flex-direction: column; + position: fixed; + left: 60rem; + right: 0; + top: 7rem; + bottom: 0; + background: var(--color-result-detail-background); + border: 1px solid var(--color-result-detail-background); + z-index: 10000; + padding: 4rem 3rem 3rem 3rem; + + a.result-images-source { + display: block; + flex: 1; + text-align: left; + width: 100%; + border: none; + text-decoration: none; + + img { + padding: 0; + margin: 0; + border: none; + object-fit: contain; + width: inherit; + max-width: 100%; + min-height: inherit; + max-height: calc(100vh - 25rem - 7rem); + background: inherit; + } + } + + .result-images-labels { + color: var(--color-result-detail-font); + max-height: 16rem; + min-height: 16rem; + + hr { + border-top: 1px solid var(--color-result-detail-hr); + border-bottom: none; + } + + h4 { + height: 2rem; + overflow: hidden; + text-overflow: ellipsis; + font-size: 0.9rem; + } + + p { + color: var(--color-result-detail-label-font); + font-size: 0.9rem; + + span { + display: inline-block; + width: 12rem; + } + } + + h4, + p, + a { + text-align: left; + } + + p.result-content { + height: 2rem; + overflow: hidden; + text-overflow: ellipsis; + } + + p.result-url { + white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; + } + + p.result-content:hover, + p.result-url:hover { + position: relative; + overflow: inherit !important; + background: var(--color-result-detail-background); + text-overflow: inherit !important; + } + + a, + a:visited, + a:hover, + a:active { + color: var(--color-result-detail-link); + } + + a:hover { + text-decoration: underline; + } + } + + a.result-detail-close { + top: 1rem; + left: 1rem; + padding: 0.4rem; + } + + a.result-detail-previous { + top: 1rem; + right: 6rem; + // center the icon by moving it slightly on the left + padding: 0.4rem 0.5rem 0.4rem 0.3rem; + } + + a.result-detail-next { + top: 1rem; + right: 2rem; + padding: 0.4rem; + } + + a.result-detail-close, + a.result-detail-next, + a.result-detail-previous { + border-radius: 50%; + display: block; + width: 1.5rem; + height: 1.5rem; + position: absolute; + filter: opacity(40%); + z-index: 2000002; + + span { + display: block; + width: 1.5rem; + height: 1.5rem; + text-align: center; + } + } + + a.result-detail-next, + a.result-detail-previous { + span::before { + // vertical center small icons + vertical-align: sub; + } + } + + a.result-detail-close, + a.result-detail-close:visited, + a.result-detail-close:hover, + a.result-detail-close:active, + a.result-detail-previous, + a.result-detail-previous:visited, + a.result-detail-previous:hover, + a.result-detail-previous:active, + a.result-detail-next, + a.result-detail-next:visited, + a.result-detail-next:hover, + a.result-detail-next:active { + color: var(--color-result-detail-font); + background: var(--color-result-detail-background); + border: 1px solid var(--color-result-detail-font); + } + + a.result-detail-close:focus, + a.result-detail-close:hover, + a.result-detail-previous:focus, + a.result-detail-previous:hover, + a.result-detail-next:focus, + a.result-detail-next:hover { + filter: opacity(80%); + } + + .loader { + position: absolute; + top: 1rem; + right: 50%; + border-top: 0.5em solid var(--color-result-detail-loader-border); + border-right: 0.5em solid var(--color-result-detail-loader-border); + border-bottom: 0.5em solid var(--color-result-detail-loader-border); + border-left: 0.5em solid var(--color-result-detail-loader-borderleft); + } +} + +#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail { + top: 0; + + a.result-images-source img { + max-height: calc(100vh - 25rem); + } +} + +@media screen and (max-width: @tablet) { + #results.image-detail-open article.result-images[data-vim-selected] .detail { + top: 0; + left: 0; + + a.result-images-source { + display: flex; + flex-direction: column; + justify-content: center; + + img { + width: 100%; + max-height: calc(100vh - 24rem); + } + } + + a.result-detail-next { + right: 1rem; + } + } +} + +@media screen and (max-width: @phone) { + #results.image-detail-open article.result-images[data-vim-selected] .detail { + top: 0; + left: 0; + padding: 1rem; + + a.result-images-source img { + width: 100%; + max-height: calc(100vh - 20rem); + margin: 0; + } + + .result-images-labels p span { + width: inherit; + margin-right: 1rem; + } + } +} diff --git a/searx/static/themes/simple/src/less/style.less b/searx/static/themes/simple/src/less/style.less index 261e3679..ea95e368 100644 --- a/searx/static/themes/simple/src/less/style.less +++ b/searx/static/themes/simple/src/less/style.less @@ -16,6 +16,7 @@ @import "code.less"; @import "toolkit.less"; @import "autocomplete.less"; +@import "detail.less"; // for index.html template @import "index.less"; @@ -138,6 +139,10 @@ article[data-vim-selected]::before { article.result-images[data-vim-selected] { background: var(--color-result-vim-arrow); + + .image_thumbnail { + filter: opacity(60%); + } } article.result-images[data-vim-selected]::before { @@ -283,25 +288,26 @@ article.result-images[data-vim-selected]::before { img { float: inherit; - margin: 0; + margin: 0.125rem; padding: 0; border: none; max-height: 200px; background: var(--color-result-image-background); } - span a { + span.title { display: none; color: var(--color-result-image-span-font); } - &:hover span a { + &:hover span.title { display: block; position: absolute; bottom: 0; right: 0; padding: 4px; margin: 0 0 4px 4px; + // color: @color-result-image-span-font; background-color: var(--color-result-image-span-background-hover); font-size: 0.7em; } @@ -569,6 +575,10 @@ article.result-images[data-vim-selected]::before { } } +#results.scrolling #backToTop { + opacity: 1; +} + @media screen and (max-width: @tablet) { #main_preferences, #main_about, diff --git a/searx/templates/simple/result_templates/images.html b/searx/templates/simple/result_templates/images.html index f756acbe..0f3069c9 100644 --- a/searx/templates/simple/result_templates/images.html +++ b/searx/templates/simple/result_templates/images.html @@ -1,4 +1,28 @@ -
- {{ result.title|striptags }} - {{ result.parsed_url[0] }}://{{ result.parsed_url[1] }} +
{{- "" -}} + {{- "" -}} + {{ result.title|striptags }}{{- "" -}} + {{ result.title|striptags }}{{- "" -}} + {{- "" -}} +
{{- "" -}} + {{ icon('close') }}{{- "" -}} + {{ icon_small('chevron-left') }}{{- "" -}} + {{ icon_small('chevron-right') }}{{- "" -}} + + {%- if result.thumbnail_src -%} + {{ result.title|striptags }} + {%- else -%} + {{ result.title|striptags }} + {%- endif -%} + {{- "" -}} +
{{- "" -}} +

{{ result.title|striptags }}

{{- "" -}} +

{%- if result.content %}{{ result.content|striptags }}{% else %} {% endif -%}

{{- "" -}} +
{{- "" -}} +

{%- if result.author %}{{ _('Author') }}:{{ result.author|striptags }}{% else %} {% endif -%}

{{- "" -}} +

{%- if result.img_format %}{{ _('Format') }}:{{ result.img_format }}{% else %} {% endif -%}

{{- "" -}} +

{%- if result.source %}{{ _('Source') }}:{{ result.source }}{% else %} {% endif -%}

{{- "" -}} +

{{ _('Engine') }}:{{ result.engine }}

{{- "" -}}{{- "" -}} +

{{ _('View source') }}:{{ result.url }}

{{- "" -}} +
{{- "" -}} +
{{- "" -}}
From a93bd191012add3adb670ecbc6e4119feb59ab02 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Thu, 28 Oct 2021 08:37:38 +0200 Subject: [PATCH 2/2] [build] /static --- .../oscar/css/logicodev-dark.min.css.map | Bin 11613 -> 11613 bytes searx/static/themes/oscar/js/searxng.js | 17 +- searx/static/themes/oscar/js/searxng.min.js | Bin 8495 -> 8597 bytes .../static/themes/oscar/js/searxng.min.js.map | Bin 8641 -> 8742 bytes .../static/themes/simple/css/searxng-rtl.css | 237 +++++++++++++++++- .../themes/simple/css/searxng-rtl.min.css | Bin 44005 -> 53178 bytes .../themes/simple/css/searxng-rtl.min.css.map | Bin 21634 -> 23463 bytes searx/static/themes/simple/css/searxng.css | 237 +++++++++++++++++- .../static/themes/simple/css/searxng.min.css | Bin 43966 -> 53139 bytes .../themes/simple/css/searxng.min.css.map | Bin 21578 -> 23407 bytes searx/static/themes/simple/js/searxng.js | 110 ++++++-- searx/static/themes/simple/js/searxng.min.js | Bin 23365 -> 24794 bytes .../themes/simple/js/searxng.min.js.map | Bin 29619 -> 31076 bytes 13 files changed, 561 insertions(+), 40 deletions(-) diff --git a/searx/static/themes/oscar/css/logicodev-dark.min.css.map b/searx/static/themes/oscar/css/logicodev-dark.min.css.map index 32293f3a43cc80ffe3356a30a41c213dc1fbcf2d..eafe5f3484fa2a3dccf2ca9963b6f47a0cea5c1d 100644 GIT binary patch delta 55 zcmV-70LcH{THRWZc>`l_WRW)?k;Wvk#+?C?c@~lZ1d}iV1+#ksN+1DRlg1)$0b#Q> NBY*<|L$kIfrv_n}6ZZfB delta 46 zcmV+}0MY;5THRWZd6QfM7O{xb0g-tRliL9avwH$cAOS;@#v*P3VzV_PfCB+zv$iIu E2EVHjb^rhX diff --git a/searx/static/themes/oscar/js/searxng.js b/searx/static/themes/oscar/js/searxng.js index bd3cabad..1bbf75ed 100644 --- a/searx/static/themes/oscar/js/searxng.js +++ b/searx/static/themes/oscar/js/searxng.js @@ -179,7 +179,7 @@ $(document).ready(function(){ /** * Layout images according to their sizes */ - searxng.image_thumbnail_layout = new searxng.ImageLayout('#main_results', '#main_results .result-images', 'img.img-thumbnail', 15, 200); + searxng.image_thumbnail_layout = new searxng.ImageLayout('#main_results', '#main_results .result-images', 'img.img-thumbnail', 15, 3, 200); searxng.image_thumbnail_layout.watch(); }); ;/** @@ -330,11 +330,12 @@ $(document).ready(function(){ */ (function (w, d) { - function ImageLayout(container_selector, results_selector, img_selector, margin, maxHeight) { + function ImageLayout(container_selector, results_selector, img_selector, verticalMargin, horizontalMargin, maxHeight) { this.container_selector = container_selector; this.results_selector = results_selector; this.img_selector = img_selector; - this.margin = margin; + this.verticalMargin = verticalMargin; + this.horizontalMargin = horizontalMargin; this.maxHeight = maxHeight; this.isAlignDone = true; } @@ -364,7 +365,7 @@ $(document).ready(function(){ } } - return (width - images.length * this.margin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3 + return (width - images.length * this.verticalMargin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3 }; ImageLayout.prototype._setSize = function (images, height) { @@ -381,10 +382,10 @@ $(document).ready(function(){ } img.style.width = imgWidth + 'px'; img.style.height = height + 'px'; - img.style.marginLeft = '3px'; - img.style.marginTop = '3px'; - img.style.marginRight = this.margin - 7 + 'px'; // -4 is the negative margin of the inline element - img.style.marginBottom = this.margin - 7 + 'px'; + img.style.marginLeft = this.horizontalMargin + 'px'; + img.style.marginTop = this.horizontalMargin + 'px'; + img.style.marginRight = this.verticalMargin - 7 + 'px'; // -4 is the negative margin of the inline element + img.style.marginBottom = this.verticalMargin - 7 + 'px'; resultNode = img.parentNode.parentNode; if (!resultNode.classList.contains('js')) { resultNode.classList.add('js'); diff --git a/searx/static/themes/oscar/js/searxng.min.js b/searx/static/themes/oscar/js/searxng.min.js index 688250b3a28fc05054f0bc2ca493d1776918746b..cc61d1c29fc03dc1b226a4f642d25e04b64318e5 100644 GIT binary patch delta 188 zcmZ4QG}U=S057BQW`Eu=9u}Qq&FaZ(WyB}%lQgj`OD!tNOis-4O)N^!%(KnYDaptz z*2~B*%B;%ID}jq=Ld0_uD?Cy&(=$qJizjnS9pQxQo_s;-o;X&m+Del*NQ>c=J0UHL QWXdyXbp&rSpNt|a0K4Kv!2kdN delta 90 zcmbR0yxwU;0Pp4?-cX*&DU5#Q*>R diff --git a/searx/static/themes/oscar/js/searxng.min.js.map b/searx/static/themes/oscar/js/searxng.min.js.map index 0b474b04ba62162e2ec4508366729affa19e53c2..526f0bedac8d420ddbde0e575b7e7e7074d0b24b 100644 GIT binary patch delta 1245 zcmaJ>&2JJ>5Kk`+)x^}#3WYY-p5!GI`6>rZ=Dpp8Wub*^2_>lqBm|bPQo1dar0Kzn zH)G!2qi2)WyZ#3z#(%<_M{mx&g_K6)1@dNoGxM9@%I+f%HW*s&sd*mrltta`Zp+WXclTQsDgl<>J()oD_G2|aj}_8vIiDv15*T#w|>kmVbAt|R$k&HuD*svvI-Dsf6K(gNpX z?cj!ZmQuj(97N?1d|O^2gd}8EM*JMz!gt zbmYN$cqO8-I_f#r6@e22CDJD%EI+LKFH~P*e}>P}Br5{BnFH=lX?c5v+ljL-Applu zYh)g(mB|oFWKjmBUD)O{p`9(0UQM3*Z!=?YG3&-6eEpP~(fgzd*rPm2l$|J-d6vZ{ z#Lh&Oq1W_oM3+anVol8UP=8EhHff9^huzU@hQ_;XbL^s2#LPLs^T?ypLv5-wWvRw9 zblwqusuq0CN!RE(V}Cp8+TwEIi8#ltxhXb&3-qzD6%o8D`ZVA!UuR44n3|}0?ZgeV kv6KbYKumdzP1?(nLt6%Qy2N1)O9?p1>0LvmYiykV0Y|D|+W-In delta 1202 zcmaJ>OHUI~6b^}!svCSn0<;heE4c}lwoq_&?wLm~Qz(?srj~4ca(t= z&;#lRoPb@8>|cprJI~puNFTSOi-t{k_%yJ+Ib~9N(kIH>%H;U%JrvV@mACz=$LAfF zhZVdK(TrHoc>!Z0wGOb3ss^x4pZHEor{vrfO8C5|x1?np@2fholJl?Na`AW~s-4Bk zwNOI@reUY>k60?3!-jpChE&Vr6r%QH+8r6%pXtolf#C1zLcp_Emh5Ea{r!bCrnasS z+^iXl&`_*hkB*18yZ-KDL$Vz-h&< zW1qJZ?Z#;}DTTZkvuDJJg;L9Ne_TO|4mL5mbT2u#*VwA8ehGxO&wj%pC$16Kw(@zf5u!=z4)tNB9z zp>E66k8-)_fA$mXQ_qAyon_eA8^oP1?tXHNHQIQw8^(Y~3*v!VWrVA`BJ zz)xHTTeyayyUC FegPwHP51x+ diff --git a/searx/static/themes/simple/css/searxng-rtl.css b/searx/static/themes/simple/css/searxng-rtl.css index 2c837c96..a4a30d9b 100644 --- a/searx/static/themes/simple/css/searxng-rtl.css +++ b/searx/static/themes/simple/css/searxng-rtl.css @@ -871,6 +871,13 @@ html { --color-result-image-background: #000bbb; --color-settings-tr-hover: #f7f7f7; --color-settings-engine-description-font: #909090; + --color-result-detail-font: #fff; + --color-result-detail-label-font: lightgray; + --color-result-detail-background: #000; + --color-result-detail-hr: #333; + --color-result-detail-link: #8af; + --color-result-detail-loader-border: rgba(255, 255, 255, 0.2); + --color-result-detail-loader-borderleft: rgba(0, 0, 0, 0); --color-toolkit-badge-font: #fff; --color-toolkit-badge-background: #777; --color-toolkit-kbd-font: #fff; @@ -941,6 +948,13 @@ html { --color-result-engines-font: #777; --color-result-search-url-border: #333; --color-result-search-url-font: #fff; + --color-result-detail-font: #fff; + --color-result-detail-label-font: lightgray; + --color-result-detail-background: #000; + --color-result-detail-hr: #333; + --color-result-detail-link: #8af; + --color-result-detail-loader-border: rgba(255, 255, 255, 0.2); + --color-result-detail-loader-borderleft: rgba(0, 0, 0, 0); --color-result-image-span-background-hover: rgba(0, 0, 0, 0.6); --color-result-image-span-font: #fff; --color-result-image-background: #8af; @@ -965,8 +979,8 @@ html { --color-toolkit-engine-tooltip-border: #333; --color-toolkit-engine-tooltip-shadow: #444; --color-toolkit-engine-tooltip-background: #222; - --color-toolkit-loader-border: rgba(0, 0, 0, 0.2); - --color-toolkit-loader-borderleft: rgba(255, 255, 255, 0); + --color-toolkit-loader-border: rgba(255, 255, 255, 0.2); + --color-toolkit-loader-borderleft: rgba(0, 0, 0, 0); } } /* @@ -1971,6 +1985,213 @@ td:hover .engine-tooltip, text-align: left; } } +#main_results #results.image-detail-open.only_template_images { + width: 59.25rem !important; +} +#main_results #results.only_template_images.image-detail-open #backToTop { + left: 56.75rem !important; + right: inherit; +} +article.result-images .detail { + display: none; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail { + display: flex; + flex-direction: column; + position: fixed; + left: 60rem; + right: 0; + top: 7rem; + bottom: 0; + background: var(--color-result-detail-background); + border: 1px solid var(--color-result-detail-background); + z-index: 10000; + padding: 4rem 3rem 3rem 3rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source { + display: block; + flex: 1; + text-align: left; + width: 100%; + border: none; + text-decoration: none; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img { + padding: 0; + margin: 0; + border: none; + object-fit: contain; + width: inherit; + max-width: 100%; + min-height: inherit; + max-height: calc(100vh - 25rem - 7rem); + background: inherit; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels { + color: var(--color-result-detail-font); + max-height: 16rem; + min-height: 16rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels hr { + border-top: 1px solid var(--color-result-detail-hr); + border-bottom: none; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4 { + height: 2rem; + overflow: hidden; + text-overflow: ellipsis; + font-size: 0.9rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p { + color: var(--color-result-detail-label-font); + font-size: 0.9rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span { + display: inline-block; + width: 12rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels h4, +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p, +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a { + text-align: left; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content { + height: 2rem; + overflow: hidden; + text-overflow: ellipsis; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url { + white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-content:hover, +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p.result-url:hover { + position: relative; + overflow: inherit !important; + background: var(--color-result-detail-background); + text-overflow: inherit !important; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a, +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:visited, +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover, +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:active { + color: var(--color-result-detail-link); +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels a:hover { + text-decoration: underline; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close { + top: 1rem; + left: 1rem; + padding: 0.4rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous { + top: 1rem; + right: 6rem; + padding: 0.4rem 0.5rem 0.4rem 0.3rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next { + top: 1rem; + right: 2rem; + padding: 0.4rem; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous { + border-radius: 50%; + display: block; + width: 1.5rem; + height: 1.5rem; + position: absolute; + filter: opacity(40%); + z-index: 2000002; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close span, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span { + display: block; + width: 1.5rem; + height: 1.5rem; + text-align: center; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next span::before, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous span::before { + vertical-align: sub; +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:visited, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:active, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:visited, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:active, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:visited, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:active { + color: var(--color-result-detail-font); + background: var(--color-result-detail-background); + border: 1px solid var(--color-result-detail-font); +} +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:focus, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-close:hover, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:focus, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-previous:hover, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:focus, +#results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next:hover { + filter: opacity(80%); +} +#results.image-detail-open article.result-images[data-vim-selected] .detail .loader { + position: absolute; + top: 1rem; + right: 50%; + border-top: 0.5em solid var(--color-result-detail-loader-border); + border-right: 0.5em solid var(--color-result-detail-loader-border); + border-bottom: 0.5em solid var(--color-result-detail-loader-border); + border-left: 0.5em solid var(--color-result-detail-loader-borderleft); +} +#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail { + top: 0; +} +#results.image-detail-open.scrolling article.result-images[data-vim-selected] .detail a.result-images-source img { + max-height: calc(100vh - 25rem); +} +@media screen and (max-width: 80em) { + #results.image-detail-open article.result-images[data-vim-selected] .detail { + top: 0; + left: 0; + } + #results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source { + display: flex; + flex-direction: column; + justify-content: center; + } + #results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img { + width: 100%; + max-height: calc(100vh - 24rem); + } + #results.image-detail-open article.result-images[data-vim-selected] .detail a.result-detail-next { + right: 1rem; + } +} +@media screen and (max-width: 50em) { + #results.image-detail-open article.result-images[data-vim-selected] .detail { + top: 0; + left: 0; + padding: 1rem; + } + #results.image-detail-open article.result-images[data-vim-selected] .detail a.result-images-source img { + width: 100%; + max-height: calc(100vh - 20rem); + margin: 0; + } + #results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p span { + width: inherit; + margin-right: 1rem; + } +} #main_index { margin-top: 16em; } @@ -2457,6 +2678,9 @@ article[data-vim-selected]::before { article.result-images[data-vim-selected] { background: var(--color-result-vim-arrow); } +article.result-images[data-vim-selected] .image_thumbnail { + filter: opacity(60%); +} article.result-images[data-vim-selected]::before { display: none; content: ""; @@ -2577,17 +2801,17 @@ article.result-images[data-vim-selected]::before { } .result-images img { float: inherit; - margin: 0; + margin: 0.125rem; padding: 0; border: none; max-height: 200px; background: var(--color-result-image-background); } -.result-images span a { +.result-images span.title { display: none; color: var(--color-result-image-span-font); } -.result-images:hover span a { +.result-images:hover span.title { display: block; position: absolute; bottom: 0; @@ -2824,6 +3048,9 @@ article.result-images[data-vim-selected]::before { margin: 0; padding: 0.7em; } +#results.scrolling #backToTop { + opacity: 1; +} @media screen and (max-width: 80em) { #main_preferences, #main_about, diff --git a/searx/static/themes/simple/css/searxng-rtl.min.css b/searx/static/themes/simple/css/searxng-rtl.min.css index eef0c27820f58660bb6835fe6bd0681aa08467ed..6cfeb33825fdd8bb7627e3a0b1ab1e769b1b3d84 100644 GIT binary patch delta 6363 zcmds5-D@0G6h~Vc+tOM=lQvD0NzydCB{R+@*|eGIhaXi?3PmV>kZQR*dw2IXvoq6~ z*(B`{gCJsP1 z-gAEEcRug=`P&D-_+Z=T`$qP-(Ce7KT!%hDCcZp5SP9?CCa6JEZrGNunW)+Fn=ZJb z%d%mcwk!9ZS{pflzZ~jY<0o6LHa;^mv-Ou{6IqMe_;Jw4`o9h8(3NYpOa5qXvj$4j z)#{X#yr{}_d8@-mkSUuRPn)pehZ58&iT{>$eDg$qcX$Nt-0^=fdZLig_~`JP-M>mV zx9v%2B=0a7Q~EeD-MdpKPL73+^`vqBMnP@RggiWC+kqBVKY6SaETg*L(yH^ybk&9J zQPg&9*9VrrI^G7zx)_PU(#MC^Hp`I4Yrt4MZ=biFfH|o;ryT1Qq`NfeG-S1)i~LpK z`p7V$!UKrx`0}~^__ymjx3kolUpb2Jp}v=S5>Nx1 zuHCWfW&Ns*tU6rLDk}NW9Z;_$tEtTrS<+0;%O>n8=r2alCD6-+?AaaHfH4s@(>50M zhDnv`K3wr-K$6(fs9AdGI|62cm_oA*zyD~zv?X^b{f7nmCDd*P__ODRkLY&o5;T0d zfqcTSMHsTUUhYx74OV3Q#-;uX8y~bF^SS{{qeK8MwIrD&KIKT3DEDPO;Wdtpw8K-N zhhxww&RB)>@U8a-pXW}a)vnBtaUhjBqEv4qOWycEN4+LzA{r{s)Sfo(Yj2$#Z~(zk0WSl7~38ItMuHW^eX1y7ewr)$k19eB}6`Zt*BIDUMMk$TZ{`$;G-oN+ZdIyq>o0umhZT53E3SlQ4x+&tc~^P zkQCNdnLbIOV@RIX-ti0nx;~g~qeaGzw0_opdi3XMqf?re&!H%~<};5|c%st<2fMv>j8GG$QK3W*R?$Hb&2)f~1qv_6BhD(L1B0bKm!`jKbFW@uUs zHf&c|rC!Yx6{Q+8ClVKs&Ot6Jz~u9`*Qw>f{SN~D$xMLE?FEbR69OrPN^w%r(`6}y zvV_PL3)V$Jcz>yzZ3zwGf^=l(5))F0jcms-83oBmhRZakQT&PMJd^3#NJ2qUlE$9} zrP$;&Dg=agT^rlYJ0`u1VCUR{O&9H`tFt?sD9N&;A`H!jZFD>llOiF7!a@*Qg@6cT z6v9!!n}x8vB=jbqep5Z}IB9VrukDLvE8$)bpFT6Nm(5GzSVP(_zP>O{FVfL6@AriP zd}rZM@1tt(#{qoi!VrCQI+_gATf;nPif6bsxhq>ucDd+mV{3ao0lSGeEY+R!OTq^gIDQ=7ml2HDA_3~I+e9(qN}qV;pz%sBt;ONds!C)Af@^*}8-;%6M8?}ZCQTq> zi`i(i$BU4lQWD6X%55S`%XMbY;EsP;Kln^cO?2($5W;Pkl{h$30dQB88fTlbMm ze~gfAAUk`}Z*|%=i(FKLRFcoB6W#CEU+L>pDr}2~zy5RppS^K@ui_)$jMtS|eS1H? u_f8+yhIiv{O55>wHxBLyzta8l#+`>JV_uWg+pt0AW3yK2-v03LuD=0|f8WNCA7Y+-pilVD>Qv%|Hl50li( M9g`rB2BW&g3h7)dBme*a diff --git a/searx/static/themes/simple/css/searxng-rtl.min.css.map b/searx/static/themes/simple/css/searxng-rtl.min.css.map index d16641e874d34dd6d4b15edb262ba9be639bf1b7..927f77661b670248ae242bc0fd39c896c79dcce4 100644 GIT binary patch delta 1953 zcma)7&2Jk;6xZ5mdqHZc>lRgQ6Us*q87Yo&YQrJq&3HXtJL`=T>?)B!ih@a9$C!|$ zt}7uU{s5p%FL0s~P$3~y$%hBUBKV+1a=6d%C^n>zJB z)rV)#c+WZ)9d^-?YCar&b?);Em7WrXBB^~PLK~1iRXJb+M;NZHUOK2hN5%lBGMb zYqpJpK#Tpwhp$9elTr@DBpe5Ud&k{pB7JH*X3{5d01Mwddig>MNLZkZ~eWW z|7|AG@Td-=A!(do(M}SlQx2?0+;M7njI-8F(JR?uyYoWY{QlB0^Yv>dhv2IZ=xE_v z63if_ctcReiRX`ogej)16Tc!|8;-RHQe0IOw2NX7F&2E+06zIhvW;GRU)p9}7d=S< zL|p`&Mf%frMI9*vGW&yByh_Y8rH8KJqPSRY;@vKp_x=;pQTN4PH#lS*Yfs+GsJCNqQC2%g=bh=+pc! z$ETL_A(>y#EqYaRfAKJ}eAE1VWeG3$UVrn%LR1o4&89iF)XFykWi0~B7-ocF$r*sM+&8S`EB zL9%vp%k1VaCBpt_xZF!5YV+og+RQUywhjE4FkjTo$FDw@u2RtAU(=2F{{b3zM}_E{ tsbuZ;fqAkvb0W+hz@}xM%%x4F&zSi)^5^q?WZklExFLATZEY@p@E2yh8m|BV delta 367 zcmZ3!ov~>pmD+U#g;z|7)N;OaJ+QCF7Hee-0yD{L%Y=Dv=TyEW_>Jtwbn-Ol7yHn~&7 z0mxb67Rzq#@1~O+5;A!Wf2vuqyR%Lx$Vl&yG)J96upN;gzGrZ@lbepWqqD0Hm>&+Z z9iq}FWAYMrZ6@#Z%@^IzGqU)Yx&?r&X7Vq0Bx#!6k{KtLO`Dlsyi`Fc6rp$_)pBLB!Asmh<47wjc`PgJqu;`v+8fQ;;gYs!#-d62WuMoSDf^GIK`jlOb$&Cwso{ z_x-->`M&)2LHyy4&-ae(cA?iceYpmGfJ}U8a&S6)E1RGSO}TDczGk9E({H%ovM$Sp zZQ8EfeQJGVKmKBp28ZtU2d z&`924FsAf!Vmf!Hj-MC{9qUQs{EdQIpaFS!$hHG5tbX!%DOf=@zo}Igl$nYPTcfDu z*sc#Oe{H-4kaZyvgQbrTu5XngjaPxObk06!I{|Z2WnMYjEl781&}qnOLKpdK!1a+~ zLWKt&L*+?I=)s_dJjVo=HOsc(S{nK;7TOHEgzs*Y`r>1F@r@yk1a!M)>5lCoAK8{x zN2{==GgR{`v5f;!b>DWhqx3=5_Itze}6!e!O=o08=LiX&oYrvR@s%aZbdflW- zbsw(!G9XE8Y1Aw|^c?{+K}?}phCg_$U)q+tl>S2k{Ss<50{q$Y!-sXddJ!7FTt_}( z*dh#BTrc;i-U6#Ke)D4g`OOcSka^tzrcojQmz$DI5}$G;OO*Svp70vSM%v*i(8Dq4 z6lbi$dHB}*gD-HW(P~#_$T*Pcd7@NrAxqx;K;)*ee2r4m4e;)_M`^e$aLrAZn8utz zDjy54BK}wxDVhs7?ip%_y$s#DX|HHaRI5QN42<|8G)?4q$kQncvWKofO<5qva;$xT zC6pvU;ZTZCazm50QvL^un4Srd9?5fng}-{Qf0BndwK@krlX_er6-)`@>x4i+b511T zj6i}Dq*7R9lPE5nC=+OELd*XbQIZD%;2$<73u9=zX0XykK9q_33`mOjiVK`LSmo9H zaLoeJLwXf+@QWgLQ)FmOni3+Py3KTjOh~y`!m6q?ga2eTcFHsSWQLK%1>5vrG zR+&CYp<_s%*6#5O|FSWdZKFlTjkJE&e!BGMX`@q`md~Lmx)w5zQ+T4&1qkNN+66V# z_OuF_rJ^A;oV|DlVl3;?@DP5A>j0>FWcc)NT$XaIyI^@ zBEn8(TFiou^+u81Co^SG)(VLbQ^&-lCe<9aHnl#3v?}Q45dmEMc{i#fV%@sk26g-UT!(bHuqgtCmt z6${oxL3n?un{5dV;evEz=MocAh>dK=Fc}5ONQTQar&0Wg=scb2+DJk{Qj*4>1*O>J zG%5syAHF)ai+4fkozGF)r%We!`W z&@Bm{9=0w;%J}xpiNVZG9fLRB4KExy^H8!=QgkY7(L`5gJHyo({^_Fu;Yf@G0-3R! z7E_sa)A=~hI}Cn#t2XXwT6=>qcxW80;af|?qZO6N3#5S|h zR*x4UL8T;+J(b%)mX_!n40L?%OQl@Fv$tWvk*nHnxmTJgtyM47k?ii z+dy{qg5PYnsusDZ2B{>US0_5(Z@k*ut4y;k9{&2%0et5Axjl-Hd^28GV)dPU_};s{ rSR3AjzbWskdo^%*SSJx^w&HUwwZA{B}V6 delta 107 zcmV-x0F?iep98+v08WNCA7Y+-pilVD>Qv%|Hl50li( N9g`rB2D7@w*$MYjEWQ8$ diff --git a/searx/static/themes/simple/css/searxng.min.css.map b/searx/static/themes/simple/css/searxng.min.css.map index 1ee100a03e7433071e7fccd4bb9c468c589962c2..84077591820ff9db7015c04f901b81c8cfd1cb28 100644 GIT binary patch delta 1983 zcma)7&u<$=6xKQ+l>n(qT?a&|+8hu952_QKA5On+v}}c>?%PBgaz1fW;q#`cs=Qr=?_r5pt%lF=& zKY52=c{A^~_qIAW<4?R3r@W^9IQzo6MJ1&aRjH-uYZ6C_C&dw{uaPpO`q`Hyc7=r$fpdWrk;J;|Qf`Q$mU`1} zoIg9m9u50tlzpixeJy%MYVC4O!lsVMV$VO5%Oc=Tf{ri6K3shJW0a3OPn%2i0A1M_dCNg%YU-Y{dV$H<%9{KzmATQ><}S znsQ>tP4l1`rigO0(KV8|vXHF%lhg#vmGlS+M|{N4Zyhxj%CJICWmgb*WTfxAf+>GV z^wtT*|Hu!UJVI-+K}B4TR#3j24SV zmZT`~w`e3ZDZJ(?sgd4|u_=Rf9)Pxw=5rV!Y63DP#!(-m5ziGop_#GGzdms3aNG&= z5*GkI2}`qqEFLPi4J*j4y)QNMWC5|C4e||ZU)On zMqnr!I>zpFaNJx<=dKbL!GFvO*-$mU0F_pZyIT(^B4m6GA|@c1mgtvh3s2^AXBald zlG{rz26=!s?8DdQ#v^ciAz7F7a1n=4zpfl1Q}sxRWi5kFNemHw$#+!nrH}qPVC6^3 zEpuPV0ID8B7#V8r0y9<(gnpsXcK1k@rErznX zgNVq9pC{!+cIF*OivkJ9H5ASMoIeeXyNKuDOM@GQ*51vF+!14o>8>wC^?1Hmn3}Ha z`enOYJ?jPWaOL-zsoF|tALerQ-L+S}s{L&3!F26*RJM>xf9eK$Q*zq7CQ6uCVeF7CsvP1L;M1& delta 320 zcmaFAjq%h9#tl;#H?L#-EV%iD@B^mFk-{>Qt;IhJ<~lh#JL+URJ32b*lsh>a`fRqB zm?^{PwOPg5fSJXkz}0Q?0##W?_swN?SJ;@n%zY6^E>pJ!z8F?9<7S;gdSHhG!nb|!a&&G}xZnI~r%^GwcB=a}s0C!rLgQw%i6Lnjby zF391&j*k91`Oc2+o;oH#sffuPex8iZn=kpTV`lNmON5%3KY4M`1{R;JWUyzLyt6l# u1?Mxd_!MM1O`fkR$K+i&nKMk4F?X{=*fJJ2AN>-i5+{gTGADCKrvLylDQ7(Z diff --git a/searx/static/themes/simple/js/searxng.js b/searx/static/themes/simple/js/searxng.js index 8f0c0cd9..02a5b87a 100644 --- a/searx/static/themes/simple/js/searxng.js +++ b/searx/static/themes/simple/js/searxng.js @@ -156,7 +156,7 @@ window.searxng = (function(w, d) { searxng.ready(function() { searxng.on('.result', 'click', function() { - highlightResult(this)(true); + highlightResult(this)(true); }); searxng.on('.result a', 'focus', function(e) { @@ -276,9 +276,7 @@ searxng.ready(function() { if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) { var tagName = e.target.tagName.toLowerCase(); if (e.keyCode === 27) { - if (tagName === 'input' || tagName === 'select' || tagName === 'textarea') { - vimKeys[e.keyCode].fun(); - } + vimKeys[e.keyCode].fun(e); } else { if (e.target === document.body || tagName === 'a' || tagName === 'button') { e.preventDefault(); @@ -365,9 +363,12 @@ searxng.ready(function() { document.location.reload(true); } - function removeFocus() { - if (document.activeElement) { + function removeFocus(e) { + const tagName = e.target.tagName.toLowerCase(); + if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) { document.activeElement.blur(); + } else { + searxng.closeDetail(); } } @@ -437,6 +438,9 @@ searxng.ready(function() { function openResult(newTab) { return function() { var link = document.querySelector('.result[data-vim-selected] h3 a'); + if (link === null) { + link = document.querySelector('.result[data-vim-selected] > a'); + } if (link !== null) { var url = link.getAttribute('href'); if (newTab) { @@ -520,6 +524,10 @@ searxng.ready(function() { return; } } + + searxng.scrollPageToSelected = scrollPageToSelected; + searxng.selectNext = highlightResult('down'); + searxng.selectPrevious = highlightResult('up'); }); ;/* SPDX-License-Identifier: AGPL-3.0-or-later */ /* global L */ @@ -628,7 +636,7 @@ searxng.ready(function() { 'use strict'; searxng.ready(function() { - searxng.image_thumbnail_layout = new searxng.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 10, 200); + searxng.image_thumbnail_layout = new searxng.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 14, 6, 200); searxng.image_thumbnail_layout.watch(); searxng.on('.btn-collapse', 'click', function() { @@ -656,17 +664,74 @@ searxng.ready(function() { } }); - w.addEventListener('scroll', function() { - var e = d.getElementById('backToTop'), - scrollTop = document.documentElement.scrollTop || document.body.scrollTop; - if (e !== null) { - if (scrollTop >= 200) { - e.style.opacity = 1; - } else { - e.style.opacity = 0; + function selectImage(e) { + /*eslint no-unused-vars: 0*/ + let t = e.target; + while (t && t.nodeName != 'ARTICLE') { + t = t.parentNode; + } + if (t) { + // load full size image in background + const imgElement = t.querySelector('.result-images-source img'); + const thumbnailElement = t.querySelector('.image_thumbnail'); + const detailElement = t.querySelector('.detail'); + if (imgElement) { + const imgSrc = imgElement.getAttribute('data-src'); + if (imgSrc) { + const loader = d.createElement('div'); + const imgLoader = new Image(); + + loader.classList.add('loader'); + detailElement.appendChild(loader); + + imgLoader.onload = e => { + imgElement.src = imgSrc; + loader.remove(); + }; + imgLoader.onerror = e => { + loader.remove(); + }; + imgLoader.src = imgSrc; + imgElement.src = thumbnailElement.src; + imgElement.removeAttribute('data-src'); + } } } + d.getElementById('results').classList.add('image-detail-open'); + searxng.image_thumbnail_layout.align(); + searxng.scrollPageToSelected(); + } + + searxng.closeDetail = function(e) { + d.getElementById('results').classList.remove('image-detail-open'); + searxng.image_thumbnail_layout.align(); + searxng.scrollPageToSelected(); + } + + searxng.on('.result-images', 'click', e => { + e.preventDefault(); + selectImage(e); }); + searxng.on('.result-images a', 'focus', selectImage, true); + searxng.on('.result-detail-close', 'click', e => { + e.preventDefault(); + searxng.closeDetail(); + }); + searxng.on('.result-detail-previous', 'click', e => searxng.selectPrevious(false)); + searxng.on('.result-detail-next', 'click', e => searxng.selectNext(false)); + + w.addEventListener('scroll', function() { + var e = d.getElementById('backToTop'), + scrollTop = document.documentElement.scrollTop || document.body.scrollTop, + results = d.getElementById('results'); + if (e !== null) { + if (scrollTop >= 100) { + results.classList.add('scrolling'); + } else { + results.classList.remove('scrolling'); + } + } + }, true); }); @@ -791,11 +856,12 @@ searxng.ready(function() { */ (function (w, d) { - function ImageLayout(container_selector, results_selector, img_selector, margin, maxHeight) { + function ImageLayout(container_selector, results_selector, img_selector, verticalMargin, horizontalMargin, maxHeight) { this.container_selector = container_selector; this.results_selector = results_selector; this.img_selector = img_selector; - this.margin = margin; + this.verticalMargin = verticalMargin; + this.horizontalMargin = horizontalMargin; this.maxHeight = maxHeight; this.isAlignDone = true; } @@ -825,7 +891,7 @@ searxng.ready(function() { } } - return (width - images.length * this.margin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3 + return (width - images.length * this.verticalMargin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3 }; ImageLayout.prototype._setSize = function (images, height) { @@ -842,10 +908,10 @@ searxng.ready(function() { } img.style.width = imgWidth + 'px'; img.style.height = height + 'px'; - img.style.marginLeft = '3px'; - img.style.marginTop = '3px'; - img.style.marginRight = this.margin - 7 + 'px'; // -4 is the negative margin of the inline element - img.style.marginBottom = this.margin - 7 + 'px'; + img.style.marginLeft = this.horizontalMargin + 'px'; + img.style.marginTop = this.horizontalMargin + 'px'; + img.style.marginRight = this.verticalMargin - 7 + 'px'; // -4 is the negative margin of the inline element + img.style.marginBottom = this.verticalMargin - 7 + 'px'; resultNode = img.parentNode.parentNode; if (!resultNode.classList.contains('js')) { resultNode.classList.add('js'); diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index c2e27c37c644b2152141db3a8845f7cedfb60e51..a6d8e9b0af6527323234c02345ec6feb736a3ebb 100644 GIT binary patch delta 1782 zcmbVMO=u)V6lP*{vj-hyv&rf@Fm^Vx-KJAJ2|xH?gO2xceT$*x{ z?4K#l&RhZ>K@tH~M|GUS18Iq(fC%dv(I8u8YtP_p1kPxW9Vf)Ut>;8Ck(d|6b{vsYhB)QYRtE z=OZcXR{z^_cdEkO*h#E7f^wu4^R-ori2@pQZPd=!43SO}n^zZ}D8%ONg^i^(_i1;v zT6GY|TG;3<-Hcne1*&w5)2@s)Ii%We+6XXzEPPSm=F=Z^&6IxXit+iRUq^>hEvwC^>D7( zwfS)VQg1n@6)i_HRz8$jD@2j=$(I=>zZQe)4rU{jZA~^Y#;Q}WLGA{G;Im@%tn>tm zs;_I*?{=)s=ZiDumCA#?3?xS&>T%+ut{QG|Xd!zXKkJMi!*Ro5c`MViM$vgRis~%V zga(0aaY+MEh*gBP+aQ7s)F`kiT8BuHMLqD=6G0;7dlK^%v}C6Swv*-vP)e#CG7JqP z1Nb0~Wyv)$NCmS~x!6n7lxK|%2|wH2LM{rTnCr-LCQ0U^FAoG-mdFzMp6L+ES%|(u zz-bGEykp|`j@Qo{IVShZf8vx&0Jio2Y4z?~P6-UzyWEeWlaxI@T|BmHmV*t{| z6~+l~LW81K*kMT)ZK!)sTK1S*~`qieZH7jUE|lnxCV8eF}v;)(r`ds!bHj zC}vmYAN6n=`F$Fkpv^e48x#+sb4Cq;XYADc?7j_C%{6Dvyis`!H~;<0Ue6V{24`9- zTNqsS;gQWYd)-^XOM}jy*oc8^n83|W^P7DVF&h0zP?~1i7Qp;guJ#*OA38Vf;%b_Y zR_4uHWbK&_D9wDzU%(s0gvV;S$s*E}ioGs{9)DMZ?=5=t9I&vdJ!yU*Kc63Gn~$&k uK7VTJl4U-q&Ut6V+DBFm7f^ROkXBCNW?nvrA6NgediD6N{$JItr~U?5wSEHt delta 414 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 literal 29619 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