From 4798acc6615efada91c8fb29083a521daf5e1e27 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Tue, 30 Nov 2021 12:43:18 +0100 Subject: [PATCH] [build] /static --- searx/static/themes/oscar/js/searxng.js | 23 ++++++++++++++++++ searx/static/themes/oscar/js/searxng.min.js | Bin 8597 -> 9233 bytes .../static/themes/oscar/js/searxng.min.js.map | Bin 8750 -> 8991 bytes .../themes/simple/img/img_load_error.svg | Bin 0 -> 5030 bytes searx/static/themes/simple/js/searxng.head.js | 4 +++ .../themes/simple/js/searxng.head.min.js | Bin 1008 -> 1056 bytes .../themes/simple/js/searxng.head.min.js.map | Bin 968 -> 1019 bytes searx/static/themes/simple/js/searxng.js | 23 ++++++++++++++++++ searx/static/themes/simple/js/searxng.min.js | Bin 25076 -> 25718 bytes .../themes/simple/js/searxng.min.js.map | Bin 31502 -> 31732 bytes 10 files changed, 50 insertions(+) create mode 100644 searx/static/themes/simple/img/img_load_error.svg diff --git a/searx/static/themes/oscar/js/searxng.js b/searx/static/themes/oscar/js/searxng.js index 1bbf75ed9..d3aef35e3 100644 --- a/searx/static/themes/oscar/js/searxng.js +++ b/searx/static/themes/oscar/js/searxng.js @@ -327,8 +327,19 @@ $(document).ready(function(){ * * @license Free to use under the MIT License. * +* @example Example usage of searxng.ImageLayout class. +* searxng.image_thumbnail_layout = new searxng.ImageLayout( +* '#urls', // container_selector +* '#urls .result-images', // results_selector +* 'img.image_thumbnail', // img_selector +* 14, // verticalMargin +* 6, // horizontalMargin +* 200 // maxHeight +* ); +* searxng.image_thumbnail_layout.watch(); */ + (function (w, d) { function ImageLayout(container_selector, results_selector, img_selector, verticalMargin, horizontalMargin, maxHeight) { this.container_selector = container_selector; @@ -455,6 +466,11 @@ $(document).ready(function(){ var results_nodes = d.querySelectorAll(this.results_selector); var results_length = results_nodes.length; + function img_load_error(event) { + // console.log("ERROR can't load: " + event.originalTarget.src); + event.originalTarget.src = w.searxng.static_path + w.searxng.theme.img_load_error; + } + function throttleAlign() { if (obj.isAlignDone) { obj.isAlignDone = false; @@ -465,15 +481,22 @@ $(document).ready(function(){ } } + // https://developer.mozilla.org/en-US/docs/Web/API/Window/pageshow_event w.addEventListener('pageshow', throttleAlign); + // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/load_event w.addEventListener('load', throttleAlign); + // https://developer.mozilla.org/en-US/docs/Web/API/Window/resize_event 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); + // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror img.addEventListener('error', throttleAlign); + if (w.searxng.theme.img_load_error) { + img.addEventListener('error', img_load_error, {once: true}); + } } } }; diff --git a/searx/static/themes/oscar/js/searxng.min.js b/searx/static/themes/oscar/js/searxng.min.js index cc61d1c29fc03dc1b226a4f642d25e04b64318e5..9da3a8b75aa57898b8f1a6e2579268a3fa37e118 100644 GIT binary patch delta 650 zcmZuuPfNov6h{z|iF)uLJ1CjTwrXvshzH$7Q9*GY1VQjpV|})PG#N>%QyDw>0Yr-5 zL-6d?&*f{iZt8M)yuAGWC3)F>K6rgB9+7Qm)2PLP)P34AOp2}j??J3-07PCB4OF#7 z;2cIcXwo|w8{%`SwNrODHm3uv!M6`VXEC>ziTbo$$LCcfaxP|Lj z`03wN)!S3CGje9E2jidvhN1ivLxFL$@*B#@|4JK*iMw8?T!vI`I&+${ Uwf!K44;!Ug$Fe%8zE?W=1To0N>i_@% delta 104 zcmbQ}G1YlPvm}o`S6XRaa!F=>o<{!WZ0TCI$qq{KjQNut`Golj64O(QGxE!obc!`~ sKthr%P=+vPQEG8!RVq+s@-L+*kZ>wU3vX&sQGO9fy=E;?#{uO)0QmkPg#Z8m diff --git a/searx/static/themes/oscar/js/searxng.min.js.map b/searx/static/themes/oscar/js/searxng.min.js.map index 3ce24b689bcecb81da783ca62f24fc0312a607b9..33b340aa6eabfa8ef6b88cf92897b4a6c8e657d6 100644 GIT binary patch delta 468 zcmZWlK~4fO6kQq?#H}l%tbam~C^4>nJ7qvJ3XF!37|CR;L$$-0T8SYs9)bht3EXf6 z;|aWmckp*cFlZNT-h2J;|M%a#m*#7!uhL|sv*>Chjmb;}Dw$Dgx$c|+y^Vek7YKdAU6T;afmWy)feY1SDIs*3=pIcuW7XndQAAA&+ArJ~4 ze2_$PXcL%ujuW#s^bmV#07JyMwnkup&?Rt!-Q34| zpctZJFhCsMwp`yT+b{fn#Z&54i1q&>H8?NCM|L=$?p{9^sKLg$Pg{#+6Ph{9MP6I_ z{3KZooiOB@)wvt*PvwE{$b2f+bxm zoT?_vD5V8Kl$tvkJA=&e%yETT66oj{43zYC^e%9QT2key0~8I+bkm7+bWC;xYAEtD UbkcElEcJ5Dank|WoT^j{09mX;6aWAK diff --git a/searx/static/themes/simple/img/img_load_error.svg b/searx/static/themes/simple/img/img_load_error.svg new file mode 100644 index 0000000000000000000000000000000000000000..8b7415f4dff835052938f1a18d944ef1a1d2a4db GIT binary patch literal 5030 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 MDQPJd%UcBg58MJ;vH$=8 literal 0 HcmV?d00001 diff --git a/searx/static/themes/simple/js/searxng.head.js b/searx/static/themes/simple/js/searxng.head.js index 21b1754bf..dab0e368a 100644 --- a/searx/static/themes/simple/js/searxng.head.js +++ b/searx/static/themes/simple/js/searxng.head.js @@ -24,6 +24,10 @@ hotkeys: script.getAttribute('data-hotkeys') === 'true', static_path: script.getAttribute('data-static-path'), translations: JSON.parse(script.getAttribute('data-translations')), + theme : { + // image that is displayed if load of failed + img_load_error: 'img/img_load_error.svg' + } }; // update the css diff --git a/searx/static/themes/simple/js/searxng.head.min.js b/searx/static/themes/simple/js/searxng.head.min.js index f42fcbe77f2716a0da4fcf0296b99716043f0ad1..9ccc8d1fdec6c90e78d1647991da286b7cabe434 100644 GIT binary patch delta 60 zcmeyszJOzc8nb~;Nk(dJs#SGnZhCx9equ^|YEe;sk(CmVua7FGS6r5^R6ALX`4j-C CGZvBn delta 11 ScmZ3$@qvAV8uR2Z=2HL}!~`z@ diff --git a/searx/static/themes/simple/js/searxng.head.min.js.map b/searx/static/themes/simple/js/searxng.head.min.js.map index 5c841a70db06e91d05681777859cd9ea5ef0ae95..92faff1d6b2af749ae0813c2a4b6bb3ebbacd1f4 100644 GIT binary patch delta 161 zcmX@X{+oS67^7H8Mrv-Vl8#blZhCx9equ^|YEe;s(dJ;r%Z#qYPL9sz&cQmqj*fvk z&W^5L&N``%j_FQ1Moy026;3*yj*gzrIg0vYA|jSfInF?Sy0g2pjz3UqmXlH~0MiLCX#fBK delta 127 zcmey(eu8~N7~|%A#tV!(rB05XSuQ%Bj*gzeIO-nv|wg3jm9ZBzFJ+ diff --git a/searx/static/themes/simple/js/searxng.js b/searx/static/themes/simple/js/searxng.js index 830c21d61..c84227541 100644 --- a/searx/static/themes/simple/js/searxng.js +++ b/searx/static/themes/simple/js/searxng.js @@ -879,8 +879,19 @@ searxng.ready(function() { * * @license Free to use under the MIT License. * +* @example Example usage of searxng.ImageLayout class. +* searxng.image_thumbnail_layout = new searxng.ImageLayout( +* '#urls', // container_selector +* '#urls .result-images', // results_selector +* 'img.image_thumbnail', // img_selector +* 14, // verticalMargin +* 6, // horizontalMargin +* 200 // maxHeight +* ); +* searxng.image_thumbnail_layout.watch(); */ + (function (w, d) { function ImageLayout(container_selector, results_selector, img_selector, verticalMargin, horizontalMargin, maxHeight) { this.container_selector = container_selector; @@ -1007,6 +1018,11 @@ searxng.ready(function() { var results_nodes = d.querySelectorAll(this.results_selector); var results_length = results_nodes.length; + function img_load_error(event) { + // console.log("ERROR can't load: " + event.originalTarget.src); + event.originalTarget.src = w.searxng.static_path + w.searxng.theme.img_load_error; + } + function throttleAlign() { if (obj.isAlignDone) { obj.isAlignDone = false; @@ -1017,15 +1033,22 @@ searxng.ready(function() { } } + // https://developer.mozilla.org/en-US/docs/Web/API/Window/pageshow_event w.addEventListener('pageshow', throttleAlign); + // https://developer.mozilla.org/en-US/docs/Web/API/FileReader/load_event w.addEventListener('load', throttleAlign); + // https://developer.mozilla.org/en-US/docs/Web/API/Window/resize_event 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); + // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror img.addEventListener('error', throttleAlign); + if (w.searxng.theme.img_load_error) { + img.addEventListener('error', img_load_error, {once: true}); + } } } }; diff --git a/searx/static/themes/simple/js/searxng.min.js b/searx/static/themes/simple/js/searxng.min.js index eafe896185ed3db486b425e3f9587b7464b4deb7..c88e39c65c7011487f92d1905e3f43b9af8093fa 100644 GIT binary patch delta 3370 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 RRc=^#L{C*r^|#55{{iONAdmn6 delta 6214 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