about summary refs log tree commit diff stats
path: root/src/pages/options/search
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/options/search')
-rw-r--r--src/pages/options/search/search.html300
-rw-r--r--src/pages/options/search/search.js157
2 files changed, 427 insertions, 30 deletions
diff --git a/src/pages/options/search/search.html b/src/pages/options/search/search.html
new file mode 100644
index 00000000..622c0799
--- /dev/null
+++ b/src/pages/options/search/search.html
@@ -0,0 +1,300 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="icon" type="image/x-icon" href="../../../assets/images/libredirect.svg">
+    <link href="../../stylesheets/styles.css" rel="stylesheet">
+    <title>General</title>
+  </head>
+</html>
+<script type="module" src="../../../assets/javascripts/localise.js"></script>
+<body class="option" dir="auto">
+    <section class="links">
+      <div class="title">
+        <svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="26px" viewBox="0 0 24 24" width="26px" fill="currentColor">
+          <path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"></path>
+        </svg><a href="../general/general.html" data-localise="__MSG_general__">General</a>
+      </div>
+      <div class="title"> <img src="../../../assets/images/youtube-icon.png"><a href="../youtube/youtube.html" data-localise="__MSG_youtube__">YouTube </a></div>
+      <div class="title"> <img src="../../../assets/images/youtube-music-icon.png"><a href="../youtubeMusic/youtubeMusic.html" data-localise="__MSG_ytmusic__">YT Music</a></div>
+      <div class="title"> <img src="../../../assets/images/twitter-icon.png"><a href="../twitter/twitter.html" data-localise="__MSG_twitter__">Twitter</a></div>
+      <div class="title"> <img src="../../../assets/images/instagram-icon.png"><a href="../instagram/instagram.html" data-localise="__MSG_instagram__">Instagram</a></div>
+      <div class="title"> <img src="../../../assets/images/tiktok-icon.png"><a href="../tiktok/tiktok.html" data-localise="__MSG_tiktok__">TikTok</a></div>
+      <div class="title"> <img src="../../../assets/images/reddit-icon.png"><a href="../reddit/reddit.html" data-localise="__MSG_reddit__">Reddit</a></div>
+      <div class="title"> <img src="../../../assets/images/imgur-icon.png"><a href="../imgur/imgur.html" data-localise="__MSG_imgur__">Imgur</a></div>
+      <div class="title"> <img src="../../../assets/images/pixiv-icon.svg"><a href="../pixiv/pixiv.html" data-localise="__MSG_pixiv__">Pixiv</a></div>
+      <div class="title"> <img src="../../../assets/images/librespeed-icon.svg"><a href="../speedtest/speedtest.html" data-localise="__MSG_speedtest__">Speedtest</a></div>
+      <div class="title"> <img src="../../../assets/images/spotify-icon.png"><a href="../spotify/spotify.html" data-localise="__MSG_spotify__">Spotify</a></div>
+      <div class="title"> <img src="../../../assets/images/wikipedia-icon.svg"><a href="../wikipedia/wikipedia.html" data-localise="__MSG_wikipedia__">Wikipedia</a></div>
+      <div class="title"> 
+        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1770 1000" fill="currentColor">
+          <circle cx="500" cy="500" r="500"></circle>
+          <ellipse ry="475" rx="250" cy="501" cx="1296"></ellipse>
+          <ellipse cx="1682" cy="502" rx="88" ry="424"></ellipse>
+        </svg><a href="../medium/medium.html" data-localise="__MSG_medium__">Medium</a>
+      </div>
+      <div class="title"> <img src="../../../assets/images/peertube-icon.svg"><a href="../peertube/peertube.html" data-localise="__MSG_peertube__">Peertube</a></div>
+      <div class="title"> <img src="../../../assets/images/lbry-icon.png"><a href="../lbry/lbry.html" data-localise="__MSG_lbry__">LBRY/Odysee</a></div>
+      <div class="title"> 
+        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
+          <path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
+        </svg><a class="selected" href="../search/search.html" data-localise="__MSG_search__">Search</a>
+      </div>
+      <div class="title"> 
+        <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
+          <path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"></path>
+        </svg><a href="../translate/translate.html" data-localise="__MSG_translate__">Translate</a>
+      </div>
+      <div class="title"> 
+        <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
+          <path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"></path>
+        </svg><a href="../maps/maps.html" data-localise="__MSG_maps__">Maps</a>
+      </div>
+      <div class="title"> 
+        <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
+          <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path>
+        </svg><a href="../sendTargets/sendTargets.html" data-localise="__MSG_sendFiles__">Send Files</a>
+      </div>
+    </section>
+  <section class="option-block">
+    <div class="some-block option-block">
+      <h4 data-localise="__MSG_enable__">Enable</h4>
+      <input id="disable-search" type="checkbox">
+    </div>
+    <div class="some-block option-block">
+      <h4 id="frontend" data-localise="__MSG_frontend__">Frontend</h4>
+      <select id="search-frontend">
+        <option value="searx">SearX</option>
+        <option value="searxng">SearXNG</option>
+        <option value="whoogle">Whoogle</option>
+        <option value="startpage">Startpage</option>
+      </select>
+    </div>
+    <div id="searx-whoogle">
+      <div class="some-block option-block">
+        <h4 data-localise="__MSG_protocol__">Protocol</h4>
+        <select id="protocol">
+          <option value="normal" data-localise="__MSG_normal__">Normal</option>
+          <option value="tor" data-localise="__MSG_tor__">Tor</option>
+          <option value="i2p" data-localise="__MSG_i2p__">I2P</option>
+        </select>
+      </div>
+    </div>
+    <div class="some-block">
+      <h4 data-localise="__MSG_searchNote__">Note: To use Search to its full potential, make LibRedirect as the Default Search Engine</h4>
+    </div>
+    <div id="searx">
+      <hr>
+      <div class="normal">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://searx.com" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+                <label class="button button-inline" id="latency-searx-label" for="latency-searx"> 
+                  <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
+                    <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
+                  </svg>&nbsp;
+                  <x data-localise="__MSG_testInstancesLatency__">Test Instances Latency</x>
+                </label>
+                <input class="button button-inline" id="latency-searx" style="display:none;">
+      </div>
+      <div class="tor">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://searx.onion" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+      </div>
+      <div class="i2p">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://searx.i2p" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+      </div>
+    </div>
+    <div id="searxng">
+      <hr>
+      <div class="normal">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://searxng.com" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+                <label class="button button-inline" id="latency-searxng-label" for="latency-searxng"> 
+                  <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
+                    <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
+                  </svg>&nbsp;
+                  <x data-localise="__MSG_testInstancesLatency__">Test Instances Latency</x>
+                </label>
+                <input class="button button-inline" id="latency-searxng" style="display:none;">
+      </div>
+      <div class="tor">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://searxng.onion" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+      </div>
+      <div class="i2p">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://searxng.i2p" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+      </div>
+    </div>
+    <div id="whoogle">
+      <hr>
+      <div class="normal">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://whoogle.com" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+                <label class="button button-inline" id="latency-whoogle-label" for="latency-whoogle"> 
+                  <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
+                    <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"></path>
+                  </svg>&nbsp;
+                  <x data-localise="__MSG_testInstancesLatency__">Test Instances Latency</x>
+                </label>
+                <input class="button button-inline" id="latency-whoogle" style="display:none;">
+      </div>
+      <div class="tor">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://whoogle.onion" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+      </div>
+      <div class="i2p">
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
+                </div>
+                <div class="checklist"></div>
+                <hr>
+                <div class="some-block option-block">
+                  <h4 data-localise="__MSG_customInstances__">Custom Instances</h4>
+                </div>
+                <form class="custom-instance-form">
+                  <div class="some-block option-block">
+                    <input class="custom-instance" placeholder="https://whoogle.i2p" type="url">
+                    <button class="add add-instance" type="submit"></button>
+                    <svg xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor">
+                      <path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path>
+                    </svg>
+                  </div>
+                </form>
+                <div class="checklist custom-checklist"></div>
+      </div>
+    </div>
+  </section>
+  <script type="module" src="../init.js"></script>
+  <script type="module" src="./search.js"></script>
+</body>
\ No newline at end of file
diff --git a/src/pages/options/search/search.js b/src/pages/options/search/search.js
index 0eeac5ed..14834309 100644
--- a/src/pages/options/search/search.js
+++ b/src/pages/options/search/search.js
@@ -118,16 +118,19 @@ searchHelper.init().then(() => {
   protocolElement.value = protocol;
   changeProtocolSettings(protocol);
 
-  commonHelper.processDefaultCustomInstances(
-    'searx',
-    'normal',
-    searchHelper,
-    document,
-    searchHelper.getSearxNormalRedirectsChecks,
-    searchHelper.setSearxNormalRedirectsChecks,
-    searchHelper.getSearxNormalCustomRedirects,
-    searchHelper.setSearxNormalCustomRedirects
-  );
+  browser.storage.local.get("searxLatency").then(r => {
+    commonHelper.processDefaultCustomInstances(
+      'searx',
+      'normal',
+      searchHelper,
+      document,
+      searchHelper.getSearxNormalRedirectsChecks,
+      searchHelper.setSearxNormalRedirectsChecks,
+      searchHelper.getSearxNormalCustomRedirects,
+      searchHelper.setSearxNormalCustomRedirects,
+      r.searxLatency
+    );
+  })
 
   commonHelper.processDefaultCustomInstances(
     'searx',
@@ -151,16 +154,19 @@ searchHelper.init().then(() => {
     searchHelper.setSearxI2pCustomRedirects
   );
 
-  commonHelper.processDefaultCustomInstances(
-    'searxng',
-    'normal',
-    searchHelper,
-    document,
-    searchHelper.getSearxngNormalRedirectsChecks,
-    searchHelper.setSearxngNormalRedirectsChecks,
-    searchHelper.getSearxngNormalCustomRedirects,
-    searchHelper.setSearxngNormalCustomRedirects
-  );
+  browser.storage.local.get("searxngLatency").then(r => {
+    commonHelper.processDefaultCustomInstances(
+      'searxng',
+      'normal',
+      searchHelper,
+      document,
+      searchHelper.getSearxngNormalRedirectsChecks,
+      searchHelper.setSearxngNormalRedirectsChecks,
+      searchHelper.getSearxngNormalCustomRedirects,
+      searchHelper.setSearxngNormalCustomRedirects,
+      r.searxngLatency,
+    );
+  })
 
   commonHelper.processDefaultCustomInstances(
     'searxng',
@@ -184,16 +190,19 @@ searchHelper.init().then(() => {
     searchHelper.setSearxngI2pCustomRedirects
   );
 
-  commonHelper.processDefaultCustomInstances(
-    'whoogle',
-    'normal',
-    searchHelper,
-    document,
-    searchHelper.getWhoogleNormalRedirectsChecks,
-    searchHelper.setWhoogleNormalRedirectsChecks,
-    searchHelper.getWhoogleNormalCustomRedirects,
-    searchHelper.setWhoogleNormalCustomRedirects
-  );
+  browser.storage.local.get("whoogleLatency").then(r => {
+    commonHelper.processDefaultCustomInstances(
+      'whoogle',
+      'normal',
+      searchHelper,
+      document,
+      searchHelper.getWhoogleNormalRedirectsChecks,
+      searchHelper.setWhoogleNormalRedirectsChecks,
+      searchHelper.getWhoogleNormalCustomRedirects,
+      searchHelper.setWhoogleNormalCustomRedirects,
+      r.whoogleLatency,
+    );
+  })
 
   commonHelper.processDefaultCustomInstances(
     'whoogle',
@@ -217,3 +226,91 @@ searchHelper.init().then(() => {
     searchHelper.setWhoogleI2pCustomRedirects
   );
 });
+
+
+let latencySearxElement = document.getElementById("latency-searx");
+let latencySearxLabel = document.getElementById("latency-searx-label");
+latencySearxElement.addEventListener("click",
+  async () => {
+    let reloadWindow = () => location.reload();
+    latencySearxElement.addEventListener("click", reloadWindow);
+    await searchHelper.init();
+    let redirects = searchHelper.getRedirects();
+    const oldHtml = latencySearxLabel.innerHTML;
+    latencySearxLabel.innerHTML = '...';
+    commonHelper.testLatency(latencySearxLabel, redirects.searx.normal).then(r => {
+      browser.storage.local.set({ searxLatency: r });
+      latencySearxLabel.innerHTML = oldHtml;
+      commonHelper.processDefaultCustomInstances(
+        'searx',
+        'normal',
+        searchHelper,
+        document,
+        searchHelper.getSearxNormalRedirectsChecks,
+        searchHelper.setSearxNormalRedirectsChecks,
+        searchHelper.getSearxNormalCustomRedirects,
+        searchHelper.setSearxNormalCustomRedirects,
+        r,
+      );
+      latencySearxElement.removeEventListener("click", reloadWindow);
+    });
+  }
+);
+
+let latencySearxngElement = document.getElementById("latency-searxng");
+let latencySearxngLabel = document.getElementById("latency-searxng-label");
+latencySearxngElement.addEventListener("click",
+  async () => {
+    let reloadWindow = () => location.reload();
+    latencySearxngElement.addEventListener("click", reloadWindow);
+    await searchHelper.init();
+    let redirects = searchHelper.getRedirects();
+    const oldHtml = latencySearxngLabel.innerHTML;
+    latencySearxngLabel.innerHTML = '...';
+    commonHelper.testLatency(latencySearxngLabel, redirects.searxng.normal).then(r => {
+      browser.storage.local.set({ searxngLatency: r });
+      latencySearxngLabel.innerHTML = oldHtml;
+      commonHelper.processDefaultCustomInstances(
+        'searxng',
+        'normal',
+        searchHelper,
+        document,
+        searchHelper.getSearxngNormalRedirectsChecks,
+        searchHelper.setSearxngNormalRedirectsChecks,
+        searchHelper.getSearxngNormalCustomRedirects,
+        searchHelper.setSearxngNormalCustomRedirects,
+        r,
+      );
+      latencySearxngElement.removeEventListener("click", reloadWindow);
+    });
+  }
+);
+
+let latencyWhoogleElement = document.getElementById("latency-whoogle");
+let latencyWhoogleLabel = document.getElementById("latency-whoogle-label");
+latencyWhoogleElement.addEventListener("click",
+  async () => {
+    let reloadWindow = () => location.reload();
+    latencyWhoogleElement.addEventListener("click", reloadWindow);
+    await searchHelper.init();
+    let redirects = searchHelper.getRedirects();
+    const oldHtml = latencyWhoogleLabel.innerHTML;
+    latencyWhoogleLabel.innerHTML = '...';
+    commonHelper.testLatency(latencyWhoogleLabel, redirects.whoogle.normal).then(r => {
+      browser.storage.local.set({ whoogleLatency: r });
+      latencyWhoogleLabel.innerHTML = oldHtml;
+      commonHelper.processDefaultCustomInstances(
+        'whoogle',
+        'normal',
+        searchHelper,
+        document,
+        searchHelper.getWhoogleNormalRedirectsChecks,
+        searchHelper.setWhoogleNormalRedirectsChecks,
+        searchHelper.getWhoogleNormalCustomRedirects,
+        searchHelper.setWhoogleNormalCustomRedirects,
+        r,
+      );
+      latencyWhoogleElement.removeEventListener("click", reloadWindow);
+    });
+  }
+);
\ No newline at end of file