From f77f797f8c7016a5748acfcf934a2c54d15af765 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Tue, 24 Aug 2021 11:31:29 +0200 Subject: [PATCH 1/2] [mod] simple theme: fix eslint errors, fix VIM keys * VIM keys: fix the next page and previous pages (n, p keys) * Map: Enable the wikipedia map (the layer was initialized but not included) --- .../themes/simple/src/js/head/00_init.js | 1 + .../simple/src/js/main/00_searx_toolkit.js | 9 +-- .../simple/src/js/main/searx_keyboard.js | 76 ++++++++++--------- .../simple/src/js/main/searx_mapresult.js | 7 +- .../simple/src/js/main/searx_results.js | 4 +- .../themes/simple/src/js/main/searx_search.js | 5 +- searx/templates/simple/results.html | 4 +- 7 files changed, 56 insertions(+), 50 deletions(-) diff --git a/searx/static/themes/simple/src/js/head/00_init.js b/searx/static/themes/simple/src/js/head/00_init.js index be7560451..0a4fafbce 100644 --- a/searx/static/themes/simple/src/js/head/00_init.js +++ b/searx/static/themes/simple/src/js/head/00_init.js @@ -15,6 +15,7 @@ * (C) 2019 by Alexandre Flament * */ +/* global DocumentTouch:readonly */ (function(w, d) { 'use strict'; diff --git a/searx/static/themes/simple/src/js/main/00_searx_toolkit.js b/searx/static/themes/simple/src/js/main/00_searx_toolkit.js index dbef4be73..335caa3ad 100644 --- a/searx/static/themes/simple/src/js/main/00_searx_toolkit.js +++ b/searx/static/themes/simple/src/js/main/00_searx_toolkit.js @@ -70,7 +70,7 @@ window.searx = (function(w, d) { } }; - searx.http = function(method, url, callback) { + searx.http = function(method, url) { var req = new XMLHttpRequest(), resolve = function() {}, reject = function() {}, @@ -148,15 +148,14 @@ window.searx = (function(w, d) { }; searx.insertBefore = function (newNode, referenceNode) { - element.parentNode.insertBefore(newNode, referenceNode); + referenceNode.parentNode.insertBefore(newNode, referenceNode); }; searx.insertAfter = function(newNode, referenceNode) { - referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); + referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling); }; - searx.on('.close', 'click', function(e) { - var el = e.target || e.srcElement; + searx.on('.close', 'click', function() { this.parentNode.classList.add('invisible'); }); 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 657d9ec93..8f410524f 100644 --- a/searx/static/themes/simple/src/js/main/searx_keyboard.js +++ b/searx/static/themes/simple/src/js/main/searx_keyboard.js @@ -1,3 +1,5 @@ +/*global searx*/ + searx.ready(function() { searx.on('.result', 'click', function() { @@ -80,13 +82,13 @@ searx.ready(function() { }, 80: { key: 'p', - fun: pageButtonClick(0), + fun: GoToPreviousPage(), des: 'go to previous page', cat: 'Results' }, 78: { key: 'n', - fun: pageButtonClick(1), + fun: GoToNextPage(), des: 'go to next page', cat: 'Results' }, @@ -118,7 +120,7 @@ searx.ready(function() { searx.on(document, "keydown", function(e) { // check for modifiers so we don't break browser's hotkeys - if (vimKeys.hasOwnProperty(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(); if (e.keyCode === 27) { if (tagName === 'input' || tagName === 'select' || tagName === 'textarea') { @@ -216,21 +218,23 @@ searx.ready(function() { } } - function pageButtonClick(num) { + function pageButtonClick(css_selector) { return function() { - var buttons = $('div#pagination button[type="submit"]'); - if (buttons.length !== 2) { - console.log('page navigation with this theme is not supported'); - return; - } - if (num >= 0 && num < buttons.length) { - buttons[num].click(); - } else { - console.log('pageButtonClick(): invalid argument'); + var button = document.querySelector(css_selector); + if (button) { + button.click(); } }; } + function GoToNextPage() { + return pageButtonClick('nav#pagination .next_page button[type="submit"]'); + } + + function GoToPreviousPage() { + return pageButtonClick('nav#pagination .previous_page button[type="submit"]'); + } + function scrollPageToSelected() { var sel = document.querySelector('.result[data-vim-selected]'); if (sel === null) { @@ -308,9 +312,9 @@ searx.ready(function() { return; } - var html = '×'; - html += '

How to navigate searx with Vim-like hotkeys

'; - html += ''; + var html = '×'; + html += '

How to navigate searx with Vim-like hotkeys

'; + html += '
'; for (var i = 0; i < sorted.length; i++) { var cat = categories[sorted[i]]; @@ -338,29 +342,29 @@ searx.ready(function() { } } - html += '
'; + html += ''; - divElement.innerHTML = html; - } + divElement.innerHTML = html; + } function toggleHelp() { - var helpPanel = document.querySelector('#vim-hotkeys-help'); - console.log(helpPanel); - if (helpPanel === undefined || helpPanel === null) { - // first call - helpPanel = document.createElement('div'); - helpPanel.id = 'vim-hotkeys-help'; - helpPanel.className='dialog-modal'; - helpPanel.style='width: 40%'; + var helpPanel = document.querySelector('#vim-hotkeys-help'); + console.log(helpPanel); + if (helpPanel === undefined || helpPanel === null) { + // first call + helpPanel = document.createElement('div'); + helpPanel.id = 'vim-hotkeys-help'; + helpPanel.className='dialog-modal'; + helpPanel.style='width: 40%'; + initHelpContent(helpPanel); initHelpContent(helpPanel); - var body = document.getElementsByTagName('body')[0]; - body.appendChild(helpPanel); - } else { - // togggle hidden - helpPanel.classList.toggle('invisible'); - return; - } - + initHelpContent(helpPanel); + var body = document.getElementsByTagName('body')[0]; + body.appendChild(helpPanel); + } else { + // togggle hidden + helpPanel.classList.toggle('invisible'); + return; + } } - }); diff --git a/searx/static/themes/simple/src/js/main/searx_mapresult.js b/searx/static/themes/simple/src/js/main/searx_mapresult.js index 7b3982c11..20da7761a 100644 --- a/searx/static/themes/simple/src/js/main/searx_mapresult.js +++ b/searx/static/themes/simple/src/js/main/searx_mapresult.js @@ -15,6 +15,7 @@ * (C) 2014 by Thomas Pointhuber, * (C) 2017 by Alexandre Flament, */ +/* global L */ (function (w, d, searx) { 'use strict'; @@ -47,7 +48,7 @@ var osmMapnikAttrib='Map data © OpenStreetMap contributors'; var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib}); var osmWikimediaUrl='https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png'; - var osmWikimediaAttrib = 'Wikimedia maps beta | Maps data © OpenStreetMap contributors'; + var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors'; var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib}); // init map view if(map_bounds) { @@ -69,8 +70,8 @@ map.addLayer(osmMapnik); var baseLayers = { - "OSM Mapnik": osmMapnik/*, - "OSM Wikimedia": osmWikimedia*/ + "OSM Mapnik": osmMapnik, + "OSM Wikimedia": osmWikimedia, }; L.control.layers(baseLayers).addTo(map); 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 fe00efc90..115c27b1d 100644 --- a/searx/static/themes/simple/src/js/main/searx_results.js +++ b/searx/static/themes/simple/src/js/main/searx_results.js @@ -21,7 +21,7 @@ searx.image_thumbnail_layout = new searx.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 10, 200); searx.image_thumbnail_layout.watch(); - searx.on('.btn-collapse', 'click', function(event) { + searx.on('.btn-collapse', 'click', function() { var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed'); var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed'); var target = this.getAttribute('data-target'); @@ -37,7 +37,7 @@ targetElement.classList.toggle('invisible'); }); - searx.on('.media-loader', 'click', function(event) { + searx.on('.media-loader', 'click', function() { var target = this.getAttribute('data-target'); var iframe_load = d.querySelector(target + ' > iframe'); var srctest = iframe_load.getAttribute('src'); diff --git a/searx/static/themes/simple/src/js/main/searx_search.js b/searx/static/themes/simple/src/js/main/searx_search.js index 0e498717c..235262b37 100644 --- a/searx/static/themes/simple/src/js/main/searx_search.js +++ b/searx/static/themes/simple/src/js/main/searx_search.js @@ -14,6 +14,7 @@ * * (C) 2017 by Alexandre Flament, */ +/* global AutoComplete */ (function(w, d, searx) { 'use strict'; @@ -56,7 +57,7 @@ searx.ready(function() { qinput = d.getElementById(qinput_id); - function placeCursorAtEndOnce(e) { + function placeCursorAtEndOnce() { if (firstFocus) { placeCursorAtEnd(qinput); firstFocus = false; @@ -98,7 +99,7 @@ if (qinput !== null && searx.search_on_category_select) { d.querySelector('.help').className='invisible'; - searx.on('#categories input', 'change', function(e) { + searx.on('#categories input', 'change', function() { var i, categories = d.querySelectorAll('#categories input[type="checkbox"]'); for(i=0; i {% if pageno > 1 %} -
+
{{- engine_data_form(engine_data) -}} @@ -163,7 +163,7 @@
{% endif %} -
+
{{- engine_data_form(engine_data) -}} From d246679dbe5eccc5e7d5be50b8c78c76e1f0bebb Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Tue, 31 Aug 2021 15:33:38 +0200 Subject: [PATCH 2/2] [build] /static --- .../oscar/css/logicodev-dark.min.css.map | Bin 11327 -> 11327 bytes .../themes/oscar/css/pointhi.min.css.map | Bin 7799 -> 7799 bytes searx/static/themes/simple/js/searx.head.js | 1 + .../themes/simple/js/searx.head.min.js.map | Bin 806 -> 806 bytes searx/static/themes/simple/js/searx.js | 103 +++++++++--------- searx/static/themes/simple/js/searx.min.js | Bin 22599 -> 22571 bytes .../static/themes/simple/js/searx.min.js.map | Bin 28970 -> 28950 bytes 7 files changed, 55 insertions(+), 49 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 223d058219a9ed625a36e36301e1629aa22221c6..73d244632a66815f382b337d71875edfbeb21fc5 100644 GIT binary patch delta 1756 zcmdlVu|Hx$*5m?4{>jmdq7$<|ZmwrkV6JzraP`pfb)`=UydG+5sn;18dtuhr(>Q(!`L5m(=8}PNNIjL)Ga>(? zd$%5#N=cSn8K0Qw2k6R_7G;WAIK z%cv|+PZLv#H?$re@Wkt(rj~l0fw326Z9R?Smyqx39bqmR7>CqTIXx5dFS>W@fmxnZ zJ=D}vuQRX#0QCQW20(qlzy?4)xX>TC6kr6bYzU`-Kt$&BcHZp5tt-UnytzpB9TSjB IRJg|t0C_yP0ssI2 diff --git a/searx/static/themes/oscar/css/pointhi.min.css.map b/searx/static/themes/oscar/css/pointhi.min.css.map index 6af5eab2391654e999bff02e00ca6cdd23d8ee77..0786f3734e5520b7498bdeae753bcf9944c220a3 100644 GIT binary patch delta 1750 zcmexv^WA1b)?^1p-pSV)1ve%pFm8UqSj|-LT;b}WaXML=;)~9?yT<`KtF+c z0`~eNT;>UO8I=X)?3 KHrq>EFarQ6Ik+bP delta 1748 zcmexv^WA1b*2an9j1#|$O)MAO{DQHXsot@|)kDYEQQOrYNIE*|xI5~*2GCESo`Ajn z2$y++T}EYrdYYI@yrK2*fG1uLHMP|142-=nYwKwozl3~O?+A0rz&NCy%ITSqf6={L z56tqU>Y=8VdYyp{0HFT|Gyv)Y1~vfd!G-?7r2r#fWkWax1R^r0xASHWZZiQ!=gs!g G7R&(MWVW9G diff --git a/searx/static/themes/simple/js/searx.head.js b/searx/static/themes/simple/js/searx.head.js index be7560451..0a4fafbce 100644 --- a/searx/static/themes/simple/js/searx.head.js +++ b/searx/static/themes/simple/js/searx.head.js @@ -15,6 +15,7 @@ * (C) 2019 by Alexandre Flament * */ +/* global DocumentTouch:readonly */ (function(w, d) { 'use strict'; diff --git a/searx/static/themes/simple/js/searx.head.min.js.map b/searx/static/themes/simple/js/searx.head.min.js.map index 04525c616e10afb1837d708ca225c1cf8e8adf80..69490193e9eb89d790f0c55abdb2358665c47b1b 100644 GIT binary patch delta 14 VcmZ3+wv25= 0 && num < buttons.length) { - buttons[num].click(); - } else { - console.log('pageButtonClick(): invalid argument'); + var button = document.querySelector(css_selector); + if (button) { + button.click(); } }; } + function GoToNextPage() { + return pageButtonClick('nav#pagination .next_page button[type="submit"]'); + } + + function GoToPreviousPage() { + return pageButtonClick('nav#pagination .previous_page button[type="submit"]'); + } + function scrollPageToSelected() { var sel = document.querySelector('.result[data-vim-selected]'); if (sel === null) { @@ -472,9 +475,9 @@ window.searx = (function(w, d) { return; } - var html = '×'; - html += '

How to navigate searx with Vim-like hotkeys

'; - html += ''; + var html = '×'; + html += '

How to navigate searx with Vim-like hotkeys

'; + html += '
'; for (var i = 0; i < sorted.length; i++) { var cat = categories[sorted[i]]; @@ -502,31 +505,31 @@ window.searx = (function(w, d) { } } - html += '
'; + html += ''; - divElement.innerHTML = html; - } + divElement.innerHTML = html; + } function toggleHelp() { - var helpPanel = document.querySelector('#vim-hotkeys-help'); - console.log(helpPanel); - if (helpPanel === undefined || helpPanel === null) { - // first call - helpPanel = document.createElement('div'); - helpPanel.id = 'vim-hotkeys-help'; - helpPanel.className='dialog-modal'; - helpPanel.style='width: 40%'; + var helpPanel = document.querySelector('#vim-hotkeys-help'); + console.log(helpPanel); + if (helpPanel === undefined || helpPanel === null) { + // first call + helpPanel = document.createElement('div'); + helpPanel.id = 'vim-hotkeys-help'; + helpPanel.className='dialog-modal'; + helpPanel.style='width: 40%'; + initHelpContent(helpPanel); initHelpContent(helpPanel); - var body = document.getElementsByTagName('body')[0]; - body.appendChild(helpPanel); - } else { - // togggle hidden - helpPanel.classList.toggle('invisible'); - return; - } - + initHelpContent(helpPanel); + var body = document.getElementsByTagName('body')[0]; + body.appendChild(helpPanel); + } else { + // togggle hidden + helpPanel.classList.toggle('invisible'); + return; + } } - }); ;/** * searx is free software: you can redistribute it and/or modify @@ -545,6 +548,7 @@ window.searx = (function(w, d) { * (C) 2014 by Thomas Pointhuber, * (C) 2017 by Alexandre Flament, */ +/* global L */ (function (w, d, searx) { 'use strict'; @@ -577,7 +581,7 @@ window.searx = (function(w, d) { var osmMapnikAttrib='Map data © OpenStreetMap contributors'; var osmMapnik = new L.TileLayer(osmMapnikUrl, {minZoom: 1, maxZoom: 19, attribution: osmMapnikAttrib}); var osmWikimediaUrl='https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png'; - var osmWikimediaAttrib = 'Wikimedia maps beta | Maps data © OpenStreetMap contributors'; + var osmWikimediaAttrib = 'Wikimedia maps | Maps data © OpenStreetMap contributors'; var osmWikimedia = new L.TileLayer(osmWikimediaUrl, {minZoom: 1, maxZoom: 19, attribution: osmWikimediaAttrib}); // init map view if(map_bounds) { @@ -599,8 +603,8 @@ window.searx = (function(w, d) { map.addLayer(osmMapnik); var baseLayers = { - "OSM Mapnik": osmMapnik/*, - "OSM Wikimedia": osmWikimedia*/ + "OSM Mapnik": osmMapnik, + "OSM Wikimedia": osmWikimedia, }; L.control.layers(baseLayers).addTo(map); @@ -640,7 +644,7 @@ window.searx = (function(w, d) { searx.image_thumbnail_layout = new searx.ImageLayout('#urls', '#urls .result-images', 'img.image_thumbnail', 10, 200); searx.image_thumbnail_layout.watch(); - searx.on('.btn-collapse', 'click', function(event) { + searx.on('.btn-collapse', 'click', function() { var btnLabelCollapsed = this.getAttribute('data-btn-text-collapsed'); var btnLabelNotCollapsed = this.getAttribute('data-btn-text-not-collapsed'); var target = this.getAttribute('data-target'); @@ -656,7 +660,7 @@ window.searx = (function(w, d) { targetElement.classList.toggle('invisible'); }); - searx.on('.media-loader', 'click', function(event) { + searx.on('.media-loader', 'click', function() { var target = this.getAttribute('data-target'); var iframe_load = d.querySelector(target + ' > iframe'); var srctest = iframe_load.getAttribute('src'); @@ -696,6 +700,7 @@ window.searx = (function(w, d) { * * (C) 2017 by Alexandre Flament, */ +/* global AutoComplete */ (function(w, d, searx) { 'use strict'; @@ -738,7 +743,7 @@ window.searx = (function(w, d) { searx.ready(function() { qinput = d.getElementById(qinput_id); - function placeCursorAtEndOnce(e) { + function placeCursorAtEndOnce() { if (firstFocus) { placeCursorAtEnd(qinput); firstFocus = false; @@ -780,7 +785,7 @@ window.searx = (function(w, d) { if (qinput !== null && searx.search_on_category_select) { d.querySelector('.help').className='invisible'; - searx.on('#categories input', 'change', function(e) { + searx.on('#categories input', 'change', function() { var i, categories = d.querySelectorAll('#categories input[type="checkbox"]'); for(i=0; i*1W~ZygFgA7;FHgSqEHkO1i`cUuYxbb%sF%BJKs0o z`D)krc-Po{6vGcYPHzj?GG8k!Ue&sG9d1PsYKMEJNcfsdVcCtQqaHs>uc0d-W{&QF z-QXVN73fF_Q#Ku+X}|JVUY*Q0^IFv#!j&};);2iW(JBHvPZ1GFRy+yEOO|j$&2$uc z-sHptK~X?KSd$_I=XkqPuYui!AcTgp7L=0esBi^tYuj!%_W+=sI)M;tDEup)O18n- zx>Wi^j#6W%vKOfV5Jk&w?(wpSuA-%R$hQ@o`XPqzbUuUC&dH9;B@GI9IwxaxqxDDU zmxdAGr%%qune{9d5;l$`at6c2#C2NlC0>a!3-2df+)NCj*Y%VU;>%q(W1)rDx-Q`N zT|dU8g;r=o0ld|J7H=nea4wl9>Nk>eq}ILUm3U+c z%B85`L44Sk!siF1;kP~-*oqPD3#qUBd}5G4Uhs{PbNJbd-L2m9@5S-{(EQV;FNIco zJzFTogc!TjD666xvl>L2ICoX&g3Pf5*=dsHVfLH2aCqzP z@Xtn)6Gc|6TZd+$PiLOMySX9U%{_O9yNty42rJRVB7k|UUmNgW6#9| delta 1275 zcmZWo&u<$=6xPORLeqq{G$bX^WNim$rZKCeQWdq%Ms0wkLJg^!NFYT;OxDl#kj;#l zeH&wKt%w^3PK*GF6DL#&BqDt1wTJ_^P(&pV;#>*T1N;Msw~o^v^fLSA&3o_L?|bik zz32S6=j{F6vshF-*%8K-zJiAP_R7^Oi1q96ehd*7jbDjXfKn^QlU7kbc@=(wHBk0i z=Jc*;6$61m?c&1(;EDF3WB_BMT+wQk&@>b2={hI|MJ%F;ftSdkLM_UVmzEVKy$A)y zk?)_Inc;~chk>ZBRRqOH=6bUZyaiz-Akpk~V{{sLkhu;YAm;>|B0&1|IK*Le?oGgk zHd}5dIY$Ydc(JJsJ`rzOZ+?PmgDNxL>TqQ#MLJrC9NX{p{?XG1A#9T>OZ}^Ti%`)9 z>=*s#?4QnrQ)=(`|KK>nesc6u#;{jxVSw9zj}{zbUmm#L@!TEo?5%;+^V7gv8BH$TD^J@bkUV+M})HM3R8_qUd&Nz+ZTqvb4aQO&%fqqJ3F#K($+_oG7(eu zol~>+o8vFqBcs|0+wo|lhh)*GTst&&iyU{xZfANo0fpTezijWF8MXW4|Ja`=KBN+B z?k^c?t=-5@+12a``&o9(HnV3OY2VGhVE3{^W5yRAZHQ^EQL_U~r;eA>EzM1as&bbS& ztQfHkq;z+Ey(-{kL?bt21eS|TKyT?P`M$5>FuZv)wPICQuD%-#BhnevX9sD!-qRMb&Oh{^g7)qA1Eu_Hf~OB7A8Zg>eV$r-j+)lqX`;f!?l% zfM5v3{#ICWl%1HGa#VYHD(}!`i@ij`e#AVoZ?m(5^fM_Rl8uTzVDsnEpDE$I>ds~f ur>A*BtQ3t94Qi@kp^#p@pa#JflnG}8?G5htDO!9c?U(#)*KFVA8{U7LbH1+t diff --git a/searx/static/themes/simple/js/searx.min.js.map b/searx/static/themes/simple/js/searx.min.js.map index 4579e5907cf9adf6460575fce75f69005887ff9a..1763fd2e53990d212c98bc74946b8e0f0b84ee01 100644 GIT binary patch delta 12243 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 D4`q8l delta 12156 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