diff options
| author | Alexandre Flament <alex@al-f.net> | 2021-10-28 08:50:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-28 08:50:55 +0200 |
| commit | 8985d3e6ef3c1371b21bee69074f0e38acae9967 (patch) | |
| tree | 0dd6787e3b6176345e681c02746177e626f0ac19 /searx/static/themes/simple/src/js/main/searx_results.js | |
| parent | 2624034cd6f417b52ed3f9f3f5226720fa0b53a1 (diff) | |
| parent | a93bd191012add3adb670ecbc6e4119feb59ab02 (diff) | |
Merge pull request #376 from dalf/simple-image-detail
Simple theme: image detail
Diffstat (limited to 'searx/static/themes/simple/src/js/main/searx_results.js')
| -rw-r--r-- | searx/static/themes/simple/src/js/main/searx_results.js | 69 |
1 files changed, 63 insertions, 6 deletions
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 79af25af8..5ccbb38b5 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 @@ } }); + 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; + scrollTop = document.documentElement.scrollTop || document.body.scrollTop, + results = d.getElementById('results'); if (e !== null) { - if (scrollTop >= 200) { - e.style.opacity = 1; + if (scrollTop >= 100) { + results.classList.add('scrolling'); } else { - e.style.opacity = 0; + results.classList.remove('scrolling'); } } - }); + }, true); }); |