mirror of
https://github.com/searxng/searxng
synced 2024-01-01 18:24:07 +00:00
[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.
This commit is contained in:
parent
2624034cd6
commit
fd374d6322
@ -11,11 +11,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
(function (w, d) {
|
(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.container_selector = container_selector;
|
||||||
this.results_selector = results_selector;
|
this.results_selector = results_selector;
|
||||||
this.img_selector = img_selector;
|
this.img_selector = img_selector;
|
||||||
this.margin = margin;
|
this.verticalMargin = verticalMargin;
|
||||||
|
this.horizontalMargin = horizontalMargin;
|
||||||
this.maxHeight = maxHeight;
|
this.maxHeight = maxHeight;
|
||||||
this.isAlignDone = true;
|
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) {
|
ImageLayout.prototype._setSize = function (images, height) {
|
||||||
@ -62,10 +63,10 @@
|
|||||||
}
|
}
|
||||||
img.style.width = imgWidth + 'px';
|
img.style.width = imgWidth + 'px';
|
||||||
img.style.height = height + 'px';
|
img.style.height = height + 'px';
|
||||||
img.style.marginLeft = '3px';
|
img.style.marginLeft = this.horizontalMargin + 'px';
|
||||||
img.style.marginTop = '3px';
|
img.style.marginTop = this.horizontalMargin + 'px';
|
||||||
img.style.marginRight = this.margin - 7 + 'px'; // -4 is the negative margin of the inline element
|
img.style.marginRight = this.verticalMargin - 7 + 'px'; // -4 is the negative margin of the inline element
|
||||||
img.style.marginBottom = this.margin - 7 + 'px';
|
img.style.marginBottom = this.verticalMargin - 7 + 'px';
|
||||||
resultNode = img.parentNode.parentNode;
|
resultNode = img.parentNode.parentNode;
|
||||||
if (!resultNode.classList.contains('js')) {
|
if (!resultNode.classList.contains('js')) {
|
||||||
resultNode.classList.add('js');
|
resultNode.classList.add('js');
|
||||||
|
@ -103,6 +103,6 @@ $(document).ready(function(){
|
|||||||
/**
|
/**
|
||||||
* Layout images according to their sizes
|
* 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();
|
searxng.image_thumbnail_layout.watch();
|
||||||
});
|
});
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
searxng.ready(function() {
|
searxng.ready(function() {
|
||||||
|
|
||||||
searxng.on('.result', 'click', function() {
|
searxng.on('.result', 'click', function() {
|
||||||
highlightResult(this)(true);
|
highlightResult(this)(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
searxng.on('.result a', 'focus', function(e) {
|
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) {
|
if (Object.prototype.hasOwnProperty.call(vimKeys, e.keyCode) && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {
|
||||||
var tagName = e.target.tagName.toLowerCase();
|
var tagName = e.target.tagName.toLowerCase();
|
||||||
if (e.keyCode === 27) {
|
if (e.keyCode === 27) {
|
||||||
if (tagName === 'input' || tagName === 'select' || tagName === 'textarea') {
|
vimKeys[e.keyCode].fun(e);
|
||||||
vimKeys[e.keyCode].fun();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (e.target === document.body || tagName === 'a' || tagName === 'button') {
|
if (e.target === document.body || tagName === 'a' || tagName === 'button') {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@ -213,9 +211,12 @@ searxng.ready(function() {
|
|||||||
document.location.reload(true);
|
document.location.reload(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeFocus() {
|
function removeFocus(e) {
|
||||||
if (document.activeElement) {
|
const tagName = e.target.tagName.toLowerCase();
|
||||||
|
if (document.activeElement && (tagName === 'input' || tagName === 'select' || tagName === 'textarea')) {
|
||||||
document.activeElement.blur();
|
document.activeElement.blur();
|
||||||
|
} else {
|
||||||
|
searxng.closeDetail();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,6 +286,9 @@ searxng.ready(function() {
|
|||||||
function openResult(newTab) {
|
function openResult(newTab) {
|
||||||
return function() {
|
return function() {
|
||||||
var link = document.querySelector('.result[data-vim-selected] h3 a');
|
var link = document.querySelector('.result[data-vim-selected] h3 a');
|
||||||
|
if (link === null) {
|
||||||
|
link = document.querySelector('.result[data-vim-selected] > a');
|
||||||
|
}
|
||||||
if (link !== null) {
|
if (link !== null) {
|
||||||
var url = link.getAttribute('href');
|
var url = link.getAttribute('href');
|
||||||
if (newTab) {
|
if (newTab) {
|
||||||
@ -368,4 +372,8 @@ searxng.ready(function() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
searxng.scrollPageToSelected = scrollPageToSelected;
|
||||||
|
searxng.selectNext = highlightResult('down');
|
||||||
|
searxng.selectPrevious = highlightResult('up');
|
||||||
});
|
});
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
searxng.ready(function() {
|
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.image_thumbnail_layout.watch();
|
||||||
|
|
||||||
searxng.on('.btn-collapse', 'click', function() {
|
searxng.on('.btn-collapse', 'click', function() {
|
||||||
@ -31,17 +31,74 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
w.addEventListener('scroll', function() {
|
function selectImage(e) {
|
||||||
var e = d.getElementById('backToTop'),
|
/*eslint no-unused-vars: 0*/
|
||||||
scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
|
let t = e.target;
|
||||||
if (e !== null) {
|
while (t && t.nodeName != 'ARTICLE') {
|
||||||
if (scrollTop >= 200) {
|
t = t.parentNode;
|
||||||
e.style.opacity = 1;
|
}
|
||||||
} else {
|
if (t) {
|
||||||
e.style.opacity = 0;
|
// 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);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -71,6 +71,14 @@ html {
|
|||||||
/// Settings Colors
|
/// Settings Colors
|
||||||
--color-settings-tr-hover: #f7f7f7;
|
--color-settings-tr-hover: #f7f7f7;
|
||||||
--color-settings-engine-description-font: darken(#dcdcdc, 30%);
|
--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
|
/// Toolkit Colors
|
||||||
--color-toolkit-badge-font: #fff;
|
--color-toolkit-badge-font: #fff;
|
||||||
--color-toolkit-badge-background: #777;
|
--color-toolkit-badge-background: #777;
|
||||||
@ -156,6 +164,14 @@ html {
|
|||||||
--color-result-engines-font: #777;
|
--color-result-engines-font: #777;
|
||||||
--color-result-search-url-border: #333;
|
--color-result-search-url-border: #333;
|
||||||
--color-result-search-url-font: #fff;
|
--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
|
// Images Colors
|
||||||
--color-result-image-span-background-hover: rgba(0, 0, 0, 0.6);
|
--color-result-image-span-background-hover: rgba(0, 0, 0, 0.6);
|
||||||
--color-result-image-span-font: #fff;
|
--color-result-image-span-font: #fff;
|
||||||
@ -183,8 +199,8 @@ html {
|
|||||||
--color-toolkit-engine-tooltip-border: #333;
|
--color-toolkit-engine-tooltip-border: #333;
|
||||||
--color-toolkit-engine-tooltip-shadow: #444;
|
--color-toolkit-engine-tooltip-shadow: #444;
|
||||||
--color-toolkit-engine-tooltip-background: #222;
|
--color-toolkit-engine-tooltip-background: #222;
|
||||||
--color-toolkit-loader-border: rgba(0, 0, 0, 0.2);
|
--color-toolkit-loader-border: rgba(255, 255, 255, 0.2);
|
||||||
--color-toolkit-loader-borderleft: rgba(255, 255, 255, 0);
|
--color-toolkit-loader-borderleft: rgba(0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
243
searx/static/themes/simple/src/less/detail.less
Normal file
243
searx/static/themes/simple/src/less/detail.less
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -16,6 +16,7 @@
|
|||||||
@import "code.less";
|
@import "code.less";
|
||||||
@import "toolkit.less";
|
@import "toolkit.less";
|
||||||
@import "autocomplete.less";
|
@import "autocomplete.less";
|
||||||
|
@import "detail.less";
|
||||||
|
|
||||||
// for index.html template
|
// for index.html template
|
||||||
@import "index.less";
|
@import "index.less";
|
||||||
@ -138,6 +139,10 @@ article[data-vim-selected]::before {
|
|||||||
|
|
||||||
article.result-images[data-vim-selected] {
|
article.result-images[data-vim-selected] {
|
||||||
background: var(--color-result-vim-arrow);
|
background: var(--color-result-vim-arrow);
|
||||||
|
|
||||||
|
.image_thumbnail {
|
||||||
|
filter: opacity(60%);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
article.result-images[data-vim-selected]::before {
|
article.result-images[data-vim-selected]::before {
|
||||||
@ -283,25 +288,26 @@ article.result-images[data-vim-selected]::before {
|
|||||||
|
|
||||||
img {
|
img {
|
||||||
float: inherit;
|
float: inherit;
|
||||||
margin: 0;
|
margin: 0.125rem;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: none;
|
border: none;
|
||||||
max-height: 200px;
|
max-height: 200px;
|
||||||
background: var(--color-result-image-background);
|
background: var(--color-result-image-background);
|
||||||
}
|
}
|
||||||
|
|
||||||
span a {
|
span.title {
|
||||||
display: none;
|
display: none;
|
||||||
color: var(--color-result-image-span-font);
|
color: var(--color-result-image-span-font);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover span a {
|
&:hover span.title {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 0 0 4px 4px;
|
margin: 0 0 4px 4px;
|
||||||
|
// color: @color-result-image-span-font;
|
||||||
background-color: var(--color-result-image-span-background-hover);
|
background-color: var(--color-result-image-span-background-hover);
|
||||||
font-size: 0.7em;
|
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) {
|
@media screen and (max-width: @tablet) {
|
||||||
#main_preferences,
|
#main_preferences,
|
||||||
#main_about,
|
#main_about,
|
||||||
|
@ -1,4 +1,28 @@
|
|||||||
<article class="result result-images {% if result['category'] %}category-{{ result['category'] }}{% endif %}">
|
<article class="result result-images {% if result['category'] %}category-{{ result['category'] }}{% endif %}">{{- "" -}}
|
||||||
<a href="{{ result.img_src }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %}><img class="image_thumbnail" src="{% if result.thumbnail_src %}{{ image_proxify(result.thumbnail_src) }}{% else %}{{ image_proxify(result.img_src) }}{% endif %}" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}" /></a>
|
<a {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} href="{{ result.img_src }}">{{- "" -}}
|
||||||
<span class="url"><a href="{{ result.url }}" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} class="small_font">{{ result.parsed_url[0] }}://{{ result.parsed_url[1] }}</a></span>
|
<img class="image_thumbnail" src="{% if result.thumbnail_src %}{{ image_proxify(result.thumbnail_src) }}{% else %}{{ image_proxify(result.img_src) }}{% endif %}" loading="lazy" title="{{ result.title|striptags }}" alt="{{ result.title|striptags }}" />{{- "" -}}
|
||||||
|
<span class="title">{{ result.title|striptags }}</span>{{- "" -}}
|
||||||
|
</a>{{- "" -}}
|
||||||
|
<div class="detail">{{- "" -}}
|
||||||
|
<a class="result-detail-close" href="#">{{ icon('close') }}</a>{{- "" -}}
|
||||||
|
<a class="result-detail-previous" href="#">{{ icon_small('chevron-left') }}</a>{{- "" -}}
|
||||||
|
<a class="result-detail-next" href="#">{{ icon_small('chevron-right') }}</a>{{- "" -}}
|
||||||
|
<a class="result-images-source" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} href="{{ result.img_src }}">
|
||||||
|
{%- if result.thumbnail_src -%}
|
||||||
|
<img src="" data-src="{{ image_proxify(result.img_src) }}" alt="{{ result.title|striptags }}">
|
||||||
|
{%- else -%}
|
||||||
|
<img src="{{ image_proxify(result.img_src) }}" alt="{{ result.title|striptags }}" loading="lazy">
|
||||||
|
{%- endif -%}
|
||||||
|
</a>{{- "" -}}
|
||||||
|
<div class="result-images-labels">{{- "" -}}
|
||||||
|
<h4>{{ result.title|striptags }}</h4>{{- "" -}}
|
||||||
|
<p class="result-content">{%- if result.content %}{{ result.content|striptags }}{% else %} {% endif -%}</p>{{- "" -}}
|
||||||
|
<hr>{{- "" -}}
|
||||||
|
<p class="result-author">{%- if result.author %}<span>{{ _('Author') }}:</span>{{ result.author|striptags }}{% else %} {% endif -%}</p>{{- "" -}}
|
||||||
|
<p class="result-format">{%- if result.img_format %}<span>{{ _('Format') }}:</span>{{ result.img_format }}{% else %} {% endif -%}</p>{{- "" -}}
|
||||||
|
<p class="result-source">{%- if result.source %}<span>{{ _('Source') }}:</span>{{ result.source }}{% else %} {% endif -%}</p>{{- "" -}}
|
||||||
|
<p class="result-engine"><span>{{ _('Engine') }}:</span>{{ result.engine }}</p>{{- "" -}}{{- "" -}}
|
||||||
|
<p class="result-url"><span>{{ _('View source') }}:</span><a {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} href="{{ result.url }}">{{ result.url }}</a></p>{{- "" -}}
|
||||||
|
</div>{{- "" -}}
|
||||||
|
</div>{{- "" -}}
|
||||||
</article>
|
</article>
|
||||||
|
Loading…
Reference in New Issue
Block a user