summaryrefslogtreecommitdiff
path: root/searx/static/themes/oscar/js
diff options
context:
space:
mode:
authorAlexandre Flament <alex@al-f.net>2021-03-22 12:00:48 +0100
committerAlexandre Flament <alex@al-f.net>2021-04-05 11:29:17 +0200
commit7a0fbdecc484284296574a2c2ba9afda01212723 (patch)
tree9ec359ced984cc18be60978458519e84feb7e8fa /searx/static/themes/oscar/js
parentba90c5a2e0629b0a04a090f11781782d15ca5dbe (diff)
downloadsearxng-7a0fbdecc484284296574a2c2ba9afda01212723.tar.gz
searxng-7a0fbdecc484284296574a2c2ba9afda01212723.zip
[enh] oscar: image thumbnail layout
Adjust thumbnail sizes to fill the container width
Diffstat (limited to 'searx/static/themes/oscar/js')
-rw-r--r--searx/static/themes/oscar/js/searx.js172
-rw-r--r--searx/static/themes/oscar/js/searx.min.js4
-rw-r--r--searx/static/themes/oscar/js/searx.min.js.map2
3 files changed, 175 insertions, 3 deletions
diff --git a/searx/static/themes/oscar/js/searx.js b/searx/static/themes/oscar/js/searx.js
index 163009481..c377e4534 100644
--- a/searx/static/themes/oscar/js/searx.js
+++ b/searx/static/themes/oscar/js/searx.js
@@ -17,6 +17,9 @@
window.searx = (function(d) {
'use strict';
+ //
+ d.getElementsByTagName("html")[0].className = "js";
+
// add data- properties
var script = d.currentScript || (function() {
var scripts = d.getElementsByTagName('script');
@@ -199,6 +202,12 @@ $(document).ready(function(){
tabs.children().attr("aria-selected", "false");
$(a.target).parent().attr("aria-selected", "true");
});
+
+ /**
+ * Layout images according to their sizes
+ */
+ searx.image_thumbnail_layout = new searx.ImageLayout('#main_results', '#main_results .result-images', 'img.img-thumbnail', 15, 200);
+ searx.image_thumbnail_layout.watch();
});
;window.addEventListener('load', function() {
// Hide infobox toggle if shrunk size already fits all content.
@@ -383,3 +392,166 @@ $(document).ready(function(){
});
});
+;/**
+*
+* Google Image Layout v0.0.1
+* Description, by Anh Trinh.
+* Heavily modified for searx
+* https://ptgamr.github.io/2014-09-12-google-image-layout/
+* https://ptgamr.github.io/google-image-layout/src/google-image-layout.js
+*
+* @license Free to use under the MIT License.
+*
+*/
+
+(function (w, d) {
+ function ImageLayout(container_selector, results_selector, img_selector, margin, maxHeight) {
+ this.container_selector = container_selector;
+ this.results_selector = results_selector;
+ this.img_selector = img_selector;
+ this.margin = margin;
+ this.maxHeight = maxHeight;
+ this.isAlignDone = true;
+ }
+
+ /**
+ * Get the height that make all images fit the container
+ *
+ * width = w1 + w2 + w3 + ... = r1*h + r2*h + r3*h + ...
+ *
+ * @param {[type]} images the images to be calculated
+ * @param {[type]} width the container witdth
+ * @param {[type]} margin the margin between each image
+ *
+ * @return {[type]} the height
+ */
+ ImageLayout.prototype._getHeigth = function (images, width) {
+ var i, img;
+ var r = 0;
+
+ for (i = 0; i < images.length; i++) {
+ img = images[i];
+ if ((img.naturalWidth > 0) && (img.naturalHeight > 0)) {
+ r += img.naturalWidth / img.naturalHeight;
+ } else {
+ // assume that not loaded images are square
+ r += 1;
+ }
+ }
+
+ return (width - images.length * this.margin) / r; //have to round down because Firefox will automatically roundup value with number of decimals > 3
+ };
+
+ ImageLayout.prototype._setSize = function (images, height) {
+ var i, img, imgWidth;
+ var imagesLength = images.length, resultNode;
+
+ for (i = 0; i < imagesLength; i++) {
+ img = images[i];
+ if ((img.naturalWidth > 0) && (img.naturalHeight > 0)) {
+ imgWidth = height * img.naturalWidth / img.naturalHeight;
+ } else {
+ // not loaded image : make it square as _getHeigth said it
+ imgWidth = height;
+ }
+ 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';
+ resultNode = img.parentNode.parentNode;
+ if (!resultNode.classList.contains('js')) {
+ resultNode.classList.add('js');
+ }
+ }
+ };
+
+ ImageLayout.prototype._alignImgs = function (imgGroup) {
+ var isSearching, slice, i, h;
+ var containerElement = d.querySelector(this.container_selector);
+ var containerCompStyles = window.getComputedStyle(containerElement);
+ var containerPaddingLeft = parseInt(containerCompStyles.getPropertyValue('padding-left'), 10);
+ var containerPaddingRight = parseInt(containerCompStyles.getPropertyValue('padding-right'), 10);
+ var containerWidth = containerElement.clientWidth - containerPaddingLeft - containerPaddingRight;
+
+ while (imgGroup.length > 0) {
+ isSearching = true;
+ for (i = 1; i <= imgGroup.length && isSearching; i++) {
+ slice = imgGroup.slice(0, i);
+ h = this._getHeigth(slice, containerWidth);
+ if (h < this.maxHeight) {
+ this._setSize(slice, h);
+ // continue with the remaining images
+ imgGroup = imgGroup.slice(i);
+ isSearching = false;
+ }
+ }
+ if (isSearching) {
+ this._setSize(slice, Math.min(this.maxHeight, h));
+ break;
+ }
+ }
+ };
+
+ ImageLayout.prototype.align = function () {
+ var i;
+ var results_selectorNode = d.querySelectorAll(this.results_selector);
+ var results_length = results_selectorNode.length;
+ var previous = null;
+ var current = null;
+ var imgGroup = [];
+
+ for (i = 0; i < results_length; i++) {
+ current = results_selectorNode[i];
+ if (current.previousElementSibling !== previous && imgGroup.length > 0) {
+ // the current image is not connected to previous one
+ // so the current image is the start of a new group of images.
+ // so call _alignImgs to align the current group
+ this._alignImgs(imgGroup);
+ // and start a new empty group of images
+ imgGroup = [];
+ }
+ // add the current image to the group (only the img tag)
+ imgGroup.push(current.querySelector(this.img_selector));
+ // update the previous variable
+ previous = current;
+ }
+ // align the remaining images
+ if (imgGroup.length > 0) {
+ this._alignImgs(imgGroup);
+ }
+ };
+
+ ImageLayout.prototype.watch = function () {
+ var i, img;
+ var obj = this;
+ var results_nodes = d.querySelectorAll(this.results_selector);
+ var results_length = results_nodes.length;
+
+ function throttleAlign() {
+ if (obj.isAlignDone) {
+ obj.isAlignDone = false;
+ setTimeout(function () {
+ obj.align();
+ obj.isAlignDone = true;
+ }, 100);
+ }
+ }
+
+ w.addEventListener('pageshow', throttleAlign);
+ w.addEventListener('load', throttleAlign);
+ w.addEventListener('resize', throttleAlign);
+
+ for (i = 0; i < results_length; i++) {
+ img = results_nodes[i].querySelector(this.img_selector);
+ if (img !== null && img !== undefined) {
+ img.addEventListener('load', throttleAlign);
+ img.addEventListener('error', throttleAlign);
+ }
+ }
+ };
+
+ w.searx.ImageLayout = ImageLayout;
+
+}(window, document));
diff --git a/searx/static/themes/oscar/js/searx.min.js b/searx/static/themes/oscar/js/searx.min.js
index b3317e0c5..8b17d4f61 100644
--- a/searx/static/themes/oscar/js/searx.min.js
+++ b/searx/static/themes/oscar/js/searx.min.js
@@ -1,4 +1,4 @@
-/*! oscar/searx.min.js | 22-03-2021 | */
+/*! oscar/searx.min.js | 05-04-2021 | */
-window.searx=function(t){"use strict";var a,a=t.currentScript||(a=t.getElementsByTagName("script"))[a.length-1];return{autocompleter:"true"===a.getAttribute("data-autocompleter"),method:a.getAttribute("data-method"),translations:JSON.parse(a.getAttribute("data-translations"))}}(document),$(document).ready(function(){var t,e="";searx.autocompleter&&((t=new Bloodhound({datumTokenizer:Bloodhound.tokenizers.obj.whitespace("value"),queryTokenizer:Bloodhound.tokenizers.whitespace,remote:{url:"./autocompleter?q=%QUERY",wildcard:"%QUERY"}})).initialize(),$("#q").on("keydown",function(t){13==t.which&&(e=$("#q").val())}),$("#q").typeahead({name:"search-results",highlight:!1,hint:!0,displayKey:function(t){return t},classNames:{input:"tt-input",hint:"tt-hint",menu:"tt-dropdown-menu",dataset:"tt-dataset-search-results"}},{name:"autocomplete",source:t}),$("#q").bind("typeahead:select",function(t,a){e&&$("#q").val(e),$("#search_form").submit()}))}),$(document).ready(function(){$("#q.autofocus").focus(),$("#clear_search").click(function(){document.getElementById("q").value=""}),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var t=$(this).data("btn-text-collapsed"),a=$(this).data("btn-text-not-collapsed");""!==t&&""!==a&&(new_html=$(this).hasClass("collapsed")?$(this).html().replace(t,a):$(this).html().replace(a,t),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var t="btn-"+$(this).data("btn-class"),a=$(this).data("btn-label-default"),e=$(this).data("btn-label-toggled");""!==e&&(new_html=$(this).hasClass("btn-default")?$(this).html().replace(a,e):$(this).html().replace(e,a),$(this).html(new_html)),$(this).toggleClass(t),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var t=$(this).data("target"),a=$(t+" > iframe"),t=a.attr("src");void 0!==t&&!1!==t||a.attr("src",a.data("src"))}),$(".btn-sm").dblclick(function(){var t="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(t),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(t),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))}),$(".nav-tabs").click(function(t){$(t.target).parents("ul").children().attr("aria-selected","false"),$(t.target).parent().attr("aria-selected","true")})}),window.addEventListener("load",function(){$(".infobox").each(function(){var t=$(this).find(".infobox_body");t.prop("scrollHeight")+t.find("img.infobox_part").height()<=t.css("max-height").replace("px","")&&$(this).find(".infobox_toggle").hide()})}),$(document).ready(function(){$(".searx_overpass_request").on("click",function(t){var a="https://overpass-api.de/api/interpreter?data=[out:json][timeout:25];(",e=");out meta;",s=$(this).data("osm-id"),n=$(this).data("osm-type"),i=$(this).data("result-table"),o="#"+$(this).data("result-table-loadicon"),r=["addr:city","addr:country","addr:housenumber","addr:postcode","addr:street"];if(s&&n&&i){var i="#"+i,l=null;switch(n){case"node":l=a+"node("+s+");"+e;break;case"way":l=a+"way("+s+");"+e;break;case"relation":l=a+"relation("+s+");"+e}l&&$.ajax(l).done(function(t){if(t&&t.elements&&t.elements[0]){var a,e=t.elements[0],s=$(i).html();for(a in e.tags)if(null===e.tags.name||-1==r.indexOf(a)){switch(s+="<tr><td>"+a+"</td><td>",a){case"phone":case"fax":s+='<a href="tel:'+e.tags[a].replace(/ /g,"")+'">'+e.tags[a]+"</a>";break;case"email":s+='<a href="mailto:'+e.tags[a]+'">'+e.tags[a]+"</a>";break;case"website":case"url":s+='<a href="'+e.tags[a]+'">'+e.tags[a]+"</a>";break;case"wikidata":s+='<a href="https://www.wikidata.org/wiki/'+e.tags[a]+'">'+e.tags[a]+"</a>";break;case"wikipedia":if(-1!=e.tags[a].indexOf(":")){s+='<a href="https://'+e.tags[a].substring(0,e.tags[a].indexOf(":"))+".wikipedia.org/wiki/"+e.tags[a].substring(e.tags[a].indexOf(":")+1)+'">'+e.tags[a]+"</a>";break}default:s+=e.tags[a]}s+="</td></tr>"}$(i).html(s),$(i).removeClass("hidden"),$(o).addClass("hidden")}}).fail(function(){$(o).html($(o).html()+'<p class="text-muted">'+searx.translations.could_not_load+"</p>")})}$(this).off(t)}),$(".searx_init_map").on("click",function(t){var a=$(this).data("leaflet-target"),e=$(this).data("map-lon"),s=$(this).data("map-lat"),n=$(this).data("map-zoom"),i=$(this).data("map-boundingbox"),o=$(this).data("map-geojson");i&&(southWest=L.latLng(i[0],i[2]),northEast=L.latLng(i[1],i[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/css/images/";var r=L.map(a),a=new L.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});new L.TileLayer("https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});setTimeout(function(){map_bounds?r.fitBounds(map_bounds,{maxZoom:17}):e&&s&&(n?r.setView(new L.LatLng(s,e),n):r.setView(new L.LatLng(s,e),8))},0),r.addLayer(a),L.control.layers({"OSM Mapnik":a}).addTo(r),o&&L.geoJson(o).addTo(r),$(this).off(t)})}),$(document).ready(function(){$("#allow-all-engines").click(function(){$(".onoffswitch-checkbox").each(function(){this.checked=!1})}),$("#disable-all-engines").click(function(){$(".onoffswitch-checkbox").each(function(){this.checked=!0})})});
+window.searx=function(t){"use strict";t.getElementsByTagName("html")[0].className="js";var e,e=t.currentScript||(e=t.getElementsByTagName("script"))[e.length-1];return{autocompleter:"true"===e.getAttribute("data-autocompleter"),method:e.getAttribute("data-method"),translations:JSON.parse(e.getAttribute("data-translations"))}}(document),$(document).ready(function(){var t,a="";searx.autocompleter&&((t=new Bloodhound({datumTokenizer:Bloodhound.tokenizers.obj.whitespace("value"),queryTokenizer:Bloodhound.tokenizers.whitespace,remote:{url:"./autocompleter?q=%QUERY",wildcard:"%QUERY"}})).initialize(),$("#q").on("keydown",function(t){13==t.which&&(a=$("#q").val())}),$("#q").typeahead({name:"search-results",highlight:!1,hint:!0,displayKey:function(t){return t},classNames:{input:"tt-input",hint:"tt-hint",menu:"tt-dropdown-menu",dataset:"tt-dataset-search-results"}},{name:"autocomplete",source:t}),$("#q").bind("typeahead:select",function(t,e){a&&$("#q").val(a),$("#search_form").submit()}))}),$(document).ready(function(){$("#q.autofocus").focus(),$("#clear_search").click(function(){document.getElementById("q").value=""}),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var t=$(this).data("btn-text-collapsed"),e=$(this).data("btn-text-not-collapsed");""!==t&&""!==e&&(new_html=$(this).hasClass("collapsed")?$(this).html().replace(t,e):$(this).html().replace(e,t),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var t="btn-"+$(this).data("btn-class"),e=$(this).data("btn-label-default"),a=$(this).data("btn-label-toggled");""!==a&&(new_html=$(this).hasClass("btn-default")?$(this).html().replace(e,a):$(this).html().replace(a,e),$(this).html(new_html)),$(this).toggleClass(t),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var t=$(this).data("target"),e=$(t+" > iframe"),t=e.attr("src");void 0!==t&&!1!==t||e.attr("src",e.data("src"))}),$(".btn-sm").dblclick(function(){var t="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(t),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(t),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))}),$(".nav-tabs").click(function(t){$(t.target).parents("ul").children().attr("aria-selected","false"),$(t.target).parent().attr("aria-selected","true")}),searx.image_thumbnail_layout=new searx.ImageLayout("#main_results","#main_results .result-images","img.img-thumbnail",15,200),searx.image_thumbnail_layout.watch()}),window.addEventListener("load",function(){$(".infobox").each(function(){var t=$(this).find(".infobox_body");t.prop("scrollHeight")+t.find("img.infobox_part").height()<=t.css("max-height").replace("px","")&&$(this).find(".infobox_toggle").hide()})}),$(document).ready(function(){$(".searx_overpass_request").on("click",function(t){var e="https://overpass-api.de/api/interpreter?data=[out:json][timeout:25];(",a=");out meta;",s=$(this).data("osm-id"),i=$(this).data("osm-type"),n=$(this).data("result-table"),o="#"+$(this).data("result-table-loadicon"),r=["addr:city","addr:country","addr:housenumber","addr:postcode","addr:street"];if(s&&i&&n){var n="#"+n,l=null;switch(i){case"node":l=e+"node("+s+");"+a;break;case"way":l=e+"way("+s+");"+a;break;case"relation":l=e+"relation("+s+");"+a}l&&$.ajax(l).done(function(t){if(t&&t.elements&&t.elements[0]){var e,a=t.elements[0],s=$(n).html();for(e in a.tags)if(null===a.tags.name||-1==r.indexOf(e)){switch(s+="<tr><td>"+e+"</td><td>",e){case"phone":case"fax":s+='<a href="tel:'+a.tags[e].replace(/ /g,"")+'">'+a.tags[e]+"</a>";break;case"email":s+='<a href="mailto:'+a.tags[e]+'">'+a.tags[e]+"</a>";break;case"website":case"url":s+='<a href="'+a.tags[e]+'">'+a.tags[e]+"</a>";break;case"wikidata":s+='<a href="https://www.wikidata.org/wiki/'+a.tags[e]+'">'+a.tags[e]+"</a>";break;case"wikipedia":if(-1!=a.tags[e].indexOf(":")){s+='<a href="https://'+a.tags[e].substring(0,a.tags[e].indexOf(":"))+".wikipedia.org/wiki/"+a.tags[e].substring(a.tags[e].indexOf(":")+1)+'">'+a.tags[e]+"</a>";break}default:s+=a.tags[e]}s+="</td></tr>"}$(n).html(s),$(n).removeClass("hidden"),$(o).addClass("hidden")}}).fail(function(){$(o).html($(o).html()+'<p class="text-muted">'+searx.translations.could_not_load+"</p>")})}$(this).off(t)}),$(".searx_init_map").on("click",function(t){var e=$(this).data("leaflet-target"),a=$(this).data("map-lon"),s=$(this).data("map-lat"),i=$(this).data("map-zoom"),n=$(this).data("map-boundingbox"),o=$(this).data("map-geojson");n&&(southWest=L.latLng(n[0],n[2]),northEast=L.latLng(n[1],n[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/css/images/";var r=L.map(e),e=new L.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});new L.TileLayer("https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});setTimeout(function(){map_bounds?r.fitBounds(map_bounds,{maxZoom:17}):a&&s&&(i?r.setView(new L.LatLng(s,a),i):r.setView(new L.LatLng(s,a),8))},0),r.addLayer(e),L.control.layers({"OSM Mapnik":e}).addTo(r),o&&L.geoJson(o).addTo(r),$(this).off(t)})}),$(document).ready(function(){$("#allow-all-engines").click(function(){$(".onoffswitch-checkbox").each(function(){this.checked=!1})}),$("#disable-all-engines").click(function(){$(".onoffswitch-checkbox").each(function(){this.checked=!0})})}),function(o,c){function t(t,e,a,s,i){this.container_selector=t,this.results_selector=e,this.img_selector=a,this.margin=s,this.maxHeight=i,this.isAlignDone=!0}t.prototype._getHeigth=function(t,e){for(var a,s=0,i=0;i<t.length;i++)0<(a=t[i]).naturalWidth&&0<a.naturalHeight?s+=a.naturalWidth/a.naturalHeight:s+=1;return(e-t.length*this.margin)/s},t.prototype._setSize=function(t,e){for(var a,s,i=t.length,n=0;n<i;n++)a=0<(s=t[n]).naturalWidth&&0<s.naturalHeight?e*s.naturalWidth/s.naturalHeight:e,s.style.width=a+"px",s.style.height=e+"px",s.style.marginLeft="3px",s.style.marginTop="3px",s.style.marginRight=this.margin-7+"px",s.style.marginBottom=this.margin-7+"px",(s=s.parentNode.parentNode).classList.contains("js")||s.classList.add("js")},t.prototype._alignImgs=function(t){for(var e,a,s,i,n=c.querySelector(this.container_selector),o=window.getComputedStyle(n),r=parseInt(o.getPropertyValue("padding-left"),10),o=parseInt(o.getPropertyValue("padding-right"),10),l=n.clientWidth-r-o;0<t.length;){for(e=!0,s=1;s<=t.length&&e;s++)a=t.slice(0,s),(i=this._getHeigth(a,l))<this.maxHeight&&(this._setSize(a,i),t=t.slice(s),e=!1);if(e){this._setSize(a,Math.min(this.maxHeight,i));break}}},t.prototype.align=function(){for(var t=c.querySelectorAll(this.results_selector),e=t.length,a=null,s=null,i=[],n=0;n<e;n++)(s=t[n]).previousElementSibling!==a&&0<i.length&&(this._alignImgs(i),i=[]),i.push(s.querySelector(this.img_selector)),a=s;0<i.length&&this._alignImgs(i)},t.prototype.watch=function(){var t,e,a=this,s=c.querySelectorAll(this.results_selector),i=s.length;function n(){a.isAlignDone&&(a.isAlignDone=!1,setTimeout(function(){a.align(),a.isAlignDone=!0},100))}for(o.addEventListener("pageshow",n),o.addEventListener("load",n),o.addEventListener("resize",n),t=0;t<i;t++)null!=(e=s[t].querySelector(this.img_selector))&&(e.addEventListener("load",n),e.addEventListener("error",n))},o.searx.ImageLayout=t}(window,document);
//# sourceMappingURL=searx.min.js.map \ No newline at end of file
diff --git a/searx/static/themes/oscar/js/searx.min.js.map b/searx/static/themes/oscar/js/searx.min.js.map
index 13e949a74..506dde42f 100644
--- a/searx/static/themes/oscar/js/searx.min.js.map
+++ b/searx/static/themes/oscar/js/searx.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"searx.min.js","sources":["searx.js"],"names":["window","searx","d","scripts","script","currentScript","getElementsByTagName","length","autocompleter","getAttribute","method","translations","JSON","parse","document","$","ready","searchResults","original_search_value","Bloodhound","datumTokenizer","tokenizers","obj","whitespace","queryTokenizer","remote","url","wildcard","initialize","on","e","which","val","typeahead","name","highlight","hint","displayKey","result","classNames","input","menu","dataset","source","bind","ev","suggestion","submit","focus","click","getElementById","value","this","select","btnTextCollapsed","data","btnTextNotCollapsed","new_html","hasClass","html","replace","btnClass","btnLabelDefault","btnLabelToggled","toggleClass","target","iframe_load","srctest","attr","undefined","dblclick","prop","addClass","removeClass","removeAttr","checked","a","parents","children","parent","addEventListener","each","infobox_body","find","height","css","hide","event","query_start","overpass_url","query_end","osm_id","osm_type","result_table","result_table_loadicon","osm_ignore_tags","query","ajax","done","elements","row","element","newHtml","tags","indexOf","substring","fail","could_not_load","off","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","southWest","L","latLng","northEast","map_bounds","latLngBounds","Icon","Default","imagePath","map","osmMapnik","TileLayer","minZoom","maxZoom","attribution","setTimeout","fitBounds","setView","LatLng","addLayer","control","layers","OSM Mapnik","addTo","geoJson"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"searx.min.js","sources":["searx.js"],"names":["window","searx","d","getElementsByTagName","className","scripts","script","currentScript","length","autocompleter","getAttribute","method","translations","JSON","parse","document","$","ready","searchResults","original_search_value","Bloodhound","datumTokenizer","tokenizers","obj","whitespace","queryTokenizer","remote","url","wildcard","initialize","on","e","which","val","typeahead","name","highlight","hint","displayKey","result","classNames","input","menu","dataset","source","bind","ev","suggestion","submit","focus","click","getElementById","value","this","select","btnTextCollapsed","data","btnTextNotCollapsed","new_html","hasClass","html","replace","btnClass","btnLabelDefault","btnLabelToggled","toggleClass","target","iframe_load","srctest","attr","undefined","dblclick","prop","addClass","removeClass","removeAttr","checked","a","parents","children","parent","image_thumbnail_layout","ImageLayout","watch","addEventListener","each","infobox_body","find","height","css","hide","event","query_start","overpass_url","query_end","osm_id","osm_type","result_table","result_table_loadicon","osm_ignore_tags","query","ajax","done","elements","row","element","newHtml","tags","indexOf","substring","fail","could_not_load","off","leaflet_target","map_lon","map_lat","map_zoom","map_boundingbox","map_geojson","southWest","L","latLng","northEast","map_bounds","latLngBounds","Icon","Default","imagePath","map","osmMapnik","TileLayer","minZoom","maxZoom","attribution","setTimeout","fitBounds","setView","LatLng","addLayer","control","layers","OSM Mapnik","addTo","geoJson","w","container_selector","results_selector","img_selector","margin","maxHeight","isAlignDone","prototype","_getHeigth","images","width","img","r","i","naturalWidth","naturalHeight","_setSize","imgWidth","resultNode","imagesLength","style","marginLeft","marginTop","marginRight","marginBottom","parentNode","classList","contains","add","_alignImgs","imgGroup","isSearching","slice","h","containerElement","querySelector","containerCompStyles","getComputedStyle","containerPaddingLeft","parseInt","getPropertyValue","containerPaddingRight","containerWidth","clientWidth","Math","min","align","results_selectorNode","querySelectorAll","results_length","previous","current","previousElementSibling","push","results_nodes","throttleAlign"],"mappings":"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"} \ No newline at end of file