From 6932d908b2a8f693f0d93b5e235380ac1f5bf854 Mon Sep 17 00:00:00 2001
From: Danny Harpigny <dannyhpy@disroot.org>
Date: Tue, 30 Jul 2024 11:37:38 +0200
Subject: [PATCH]

---
 .editorconfig             |  14 ++++
 css/index.css             |  68 ++++++++++++++++++
 css/theme.css             |  43 ++++++++++++
 img/about.png             | Bin 0 -> 17575 bytes
 img/favicon.png           | Bin 0 -> 343 bytes
 index.html                | 140 ++++++++++++--------------------------
 index.js => js/index.js   |  10 +--
 opensearchdescription.xml |   6 +-
 8 files changed, 175 insertions(+), 106 deletions(-)
 create mode 100644 .editorconfig
 create mode 100644 css/index.css
 create mode 100644 css/theme.css
 create mode 100644 img/about.png
 create mode 100644 img/favicon.png
 rename index.js => js/index.js (92%)

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..d57dffd
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,14 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.css]
+indent_style = space
+indent_size = 2
+
+[*.js]
+indent_style = space
+indent_size = 2
diff --git a/css/index.css b/css/index.css
new file mode 100644
index 0000000..eadd4e9
--- /dev/null
+++ b/css/index.css
@@ -0,0 +1,68 @@
+#main {
+  display: flex;
+  flex-flow: column;
+
+  width: 100%;
+
+  text-align: center;
+}
+
+@media screen and (min-width: 360px) {
+  #main {
+    margin: auto;
+    width: 360px;
+  }
+}
+
+#about img {
+  width: 100%;
+  height: auto;
+}
+
+#search {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+
+#search > * {
+  margin: 0.25rem;
+}
+
+.search-inputs {
+  width: 100%;
+  height: 2rem;
+
+  display: flex;
+}
+
+.search-inputs > * {
+  height: 100%;
+}
+
+.search-inputs input[name="query"] {
+  width: 100%;
+  box-sizing: border-box;
+}
+
+.search-radio-buttons {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.search-radio-buttons > .category {
+  display: flex;
+}
+
+.search-radio-buttons > .category:not(:last-child) {
+  margin-right: 1rem;
+}
+
+.search-radio-buttons > .category > input[type="radio"] {
+  margin: 0;
+  margin-right: 0.25rem;
+}
+
+#status {
+  font-size: smaller;
+}
diff --git a/css/theme.css b/css/theme.css
new file mode 100644
index 0000000..a3ef962
--- /dev/null
+++ b/css/theme.css
@@ -0,0 +1,43 @@
+:root {
+  --primary-color: #bc5151;
+}
+
+body {
+  background: url('https://www.tromsite.com/wp-content/uploads/2018/09/tromsite-bg-pattern-light-5.png');
+  background-repeat: repeat;
+  background-attachment: fixed;
+
+  font-family: sans-serif;
+}
+
+a {
+  color: var(--primary-color);
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+.search-inputs input[name="query"] {
+  border: 1px solid darkgrey;
+  border-radius: 0.5rem 0 0 0.5rem;
+}
+
+.search-inputs input[type="submit"] {
+  background-color: var(--primary-color);
+
+  color: white;
+  cursor: pointer;
+
+  border: none;
+  border-radius: 0 0.5rem 0.5rem 0;
+}
+
+.search-radio-buttons input[type="radio"] {
+  accent-color: var(--primary-color);
+}
+
+#status {
+  color: gray;
+}
diff --git a/img/about.png b/img/about.png
new file mode 100644
index 0000000000000000000000000000000000000000..29e5278cebdff8ccd86473a1b186cafd981a6d0d
GIT binary patch
literal 17575
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

literal 0
HcmV?d00001

diff --git a/img/favicon.png b/img/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..0a8d332ebb0d9b9fd22e8833f1bd7f4267e443c4
GIT binary patch
literal 343
zcmeAS@N?(olHy`uVBq!ia0vp^4j|0L3?#3!&-4XSoB=)|t_%z_jg5`>1P1bW8JGbD
z8B2ovf*Bm1-ADs*lDyqr7&=&GJwVC}JR*yM#$5+tMkkHg6+l7u5>H=O_807O9NHpb
zbGF9=g^qi=IEGl9-aFZwk6Dq!q0_tXk)~~z_aV(_>pv?!!&6i5ow&@%VqrK_;aG}a
z%7@OW=0|kTw{2i$eKSX}C}OdOPZQfV?QiUpH9dATs?L1YBhRN$s%x3z9J64aJ&VuO
z>~)L=4(1Bld=2s&@)`a!y}41evFxk9{c-UHtXZl#u6el`y;*DDoc&ffK}24{@|?St
zkB{8$lc{g&CY<>2+xJQ3g7fb_H?SRVn*86T&Vw_dE@OhqN+C}tU#3tnbe*&`-;>ec
aIydV-<|Q*+>ed6j#Ng@b=d#Wzp$P!t5OdD}

literal 0
HcmV?d00001

diff --git a/index.html b/index.html
index efaf8f0..1c22b1f 100644
--- a/index.html
+++ b/index.html
@@ -1,110 +1,54 @@
 <!DOCTYPE html>
 <html lang="en">
   <head>
-    <title></title>
+    <title>TROM Search</title>
     <meta charset="UTF-8">
     <meta name="referrer" content="no-referrer">
     <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="theme-color" content="#bc5151">
+    <link rel="shortcut icon" href="img/favicon.png">
     <link rel="search" title="TROM Search" type="application/opensearchdescription+xml" href="opensearchdescription.xml">
-    <style>
-      * { margin: 0; }
-      html, body { width: 100%; height: 100%; }
-body {
-  background: url('https://www.tromsite.com/wp-content/uploads/2018/09/tromsite-bg-pattern-light-5.png') !important; background-repeat: repeat !important; background-attachment: fixed !important;
-  height: auto !important;}
-
-
-#search:before {
-    content: url("https://www.tromsite.com/wp-content/uploads/2021/02/trom-logo-dark.png");
-    transform: scale(.6);
-    display: block;
-    width: 100%;
-margin: 0 auto;}
-
-      #search-box {
-        position: fixed;
-        left: 50%;
-        top: 1rem;
-        transform: translateX(-50%);
-      }
-      
-      #info {
-        color: black;
-        text-align: center;
-        font-weight: bold;
-      }
-      
-      #info.error { color: #7b7b7b; margin-top: 20px;font-size: 13px;font-style: italic;}
-
-      #search input[name="query"] {
-        width: 500px;
-        height: 40px;
-        background-color: white;
-        border: 2px solid darkgrey;
-        border-radius: 4px;
-        box-sizing: border-box;
-      }
-      
-      #search {
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-      }
-
-      #search-inputs {
-        display: flex;
-        align-items: center;
-        margin-bottom: 10px;
-      }
-
-      #search input[type="submit"] {
-        height: 40px;
-        background-color: #bc5151;
-        color: white;
-        font-weight: bold;
-        border: none;
-        border-radius: 4px;
-        margin-left: 10px;
-        cursor: pointer;
-        padding: 0 10px;
-        box-sizing: border-box;
-        width: 20%;
-      }
-
-      .search-radio-buttons {
-        display: flex;
-        justify-content: center;
-        width: 100%;
-      }
-
-      #search label {
-        margin-left: 5px;
-        margin-right: 15px;
-      }
-    </style>
-    <script type="module" src="index.js"></script>
+    <link rel="stylesheet" type="text/css" href="css/index.css">
+    <link rel="stylesheet" type="text/css" href="css/theme.css">
+    <script type="module" src="js/index.js"></script>
   </head>
   <body>
-    <div id="search-box">
-      <form id="search">
-        <div id="search-inputs">
-          <input name="query" type="text" placeholder="Query">
-          <input type="submit" value="Search">
-        </div>
-        <div class="search-radio-buttons">
-          <input type="radio" id="search-category-all" name="category" value="all" checked>
-          <label for="search-category-all">All</label>
-          <input type="radio" id="search-category-images" name="category" value="images">
-          <label for="search-category-images">Images</label>
-          <input type="radio" id="search-category-news" name="category" value="news">
-          <label for="search-category-news">News</label>
-          <input type="radio" id="search-category-videos" name="category" value="videos">
-          <label for="search-category-videos">Videos</label>
-          <input type="radio" id="search-category-files" name="category" value="files">
-          <label for="search-category-videos">Files</label>
-        </div>
-      </form>
-      <p id="info"></p>
+    <div id="main">
+      <div id="about">
+        <img src="img/about.png">
+        <p class="description">This is a <a href="https://www.trade-free.org">trade-free</a> tool, part of the <a href="https://trom.tf">trom.tf</a> suite of trade-free services.</p>
+      </div>
+      <main>
+        <form id="search">
+          <div class="search-inputs">
+            <input name="query" type="text" placeholder="Query">
+            <input type="submit" value="Search">
+          </div>
+          <div class="search-radio-buttons">
+            <div class="category">
+              <input type="radio" id="search-category-all" name="category" value="all" checked>
+              <label for="search-category-all">All</label>
+            </div>
+            <div class="category">
+              <input type="radio" id="search-category-images" name="category" value="images">
+              <label for="search-category-images">Images</label>
+            </div>
+            <div class="category">
+              <input type="radio" id="search-category-news" name="category" value="news">
+              <label for="search-category-news">News</label>
+            </div>
+            <div class="category">
+              <input type="radio" id="search-category-videos" name="category" value="videos">
+              <label for="search-category-videos">Videos</label>
+            </div>
+            <div class="category">
+              <input type="radio" id="search-category-files" name="category" value="files">
+              <label for="search-category-files">Files</label>
+            </div>
+          </div>
+        </form>
+      </main>
+      <p id="status"></p>
     </div>
   </body>
 </html>
diff --git a/index.js b/js/index.js
similarity index 92%
rename from index.js
rename to js/index.js
index 156216c..828a0f7 100644
--- a/index.js
+++ b/js/index.js
@@ -2,12 +2,12 @@ const storageType = 'localStorage'
 
 let data = {}
 
-const infoEl = document.getElementById('info')
+const statusEl = document.getElementById('status')
 const formEl = document.getElementById('search')
 
 const errors = {
   missingQuery: new TypeError('Query is missing.'),
-  noFoundInstances: new TypeError('No instances were found.'),
+  noFoundInstances: new Error('No instances were found.'),
 }
 
 function buildSearchURL (opts = {}) {
@@ -102,7 +102,7 @@ if (location.search.length > 0) {
   }
 }
 
-infoEl.textContent = `${data.instances.length} instances`
-if (data.instances.length > 0) {
-  infoEl.classList.add('error')
+statusEl.textContent = `${data.instances.length} instances`
+if (data.instances.length === 0) {
+  statusEl.classList.add('error')
 }
diff --git a/opensearchdescription.xml b/opensearchdescription.xml
index 23de862..a8082a5 100644
--- a/opensearchdescription.xml
+++ b/opensearchdescription.xml
@@ -2,6 +2,6 @@
   <ShortName>TROM</ShortName>
   <Description>TROM Search</Description>
   <InputEncoding>UTF-8</InputEncoding>
-  <Url type="application/opensearchdescription+xml" rel="self" template="https://testsearch.trom.tf/opensearchdescription.xml"></Url>
-  <Url type="text/html" template="https://testsearch.trom.tf/?q={searchTerms}"></Url>
-</OpenSearchDescription>
\ No newline at end of file
+  <Url type="application/opensearchdescription+xml" rel="self" template="https://search.trom.tf/opensearchdescription.xml"></Url>
+  <Url type="text/html" template="https://search.trom.tf/?q={searchTerms}"></Url>
+</OpenSearchDescription>