Pārlūkot izejas kodu

Select item with arrow keys

Daoud Clarke 3 gadi atpakaļ
vecāks
revīzija
5e7c5a905e
2 mainītis faili ar 53 papildinājumiem un 7 dzēšanām
  1. 4 0
      static/index.css
  2. 49 7
      static/index.js

+ 4 - 0
static/index.css

@@ -55,6 +55,10 @@ div .result:hover {
     background: #f0f0ff;
 }
 
+div .selected {
+    background: #f0f0ff;
+}
+
 div .result {
     padding: 10px;
 }

+ 49 - 7
static/index.js

@@ -1,4 +1,7 @@
 
+ts = {
+    selected: null
+};
 
 window.onload = (event) => {
     const searchInput = document.getElementById('search');
@@ -17,27 +20,65 @@ window.onload = (event) => {
                 console.log(response);
                 response.json().then(content => {
                     console.log(content);
-                    content.forEach(element => {
-                        addResult(element.title, element.extract, element.url);
-                    })
+                    for (const [i, element] of content.entries()) {
+                        addResult(element.title, element.extract, element.url, i);
+                    };
+                    ts.selected = null;
                 });
             });
-        } else if (e.key == 'ArrowDown') {
-
+        }
+    });
+    
+    document.addEventListener('keyup', (e) => {
+        if (e.key == 'ArrowDown') {
+            selectNextItem();
         } else if (e.key == 'ArrowUp') {
-
+            selectPreviousItem();
         }
     });
 };
 
 
+function selectNextItem() {
+    if (ts.selected === null) {
+        ts.selected = 0;
+    } else {
+        ts.selected++;
+    }
+
+    updateSelected();
+}
+
+
+function selectPreviousItem() {
+    if (ts.selected === null) {
+        ts.selected = 0;
+    } else {
+        ts.selected--;
+    }
+
+    updateSelected();
+}
+
+
+function updateSelected() {
+    const results = document.querySelectorAll('.result');
+    results.forEach(child => {
+        child.classList.remove('selected');
+    });
+
+    const selectedResult = document.getElementById(ts.selected.toString());
+    selectedResult.classList.add('selected');
+}
+
+
 function clearResults() {
   const results = document.getElementById('results');
   results.innerHTML = '';
 }
 
 
-function addResult(title, extract, url) {
+function addResult(title, extract, url, id) {
    const par = document.createElement("p");
 
    const titleText = createBoldedSpan(title);
@@ -53,6 +94,7 @@ function addResult(title, extract, url) {
 
    const div = document.createElement("div");
    div.classList.add('result');
+   div.id = id.toString();
 
    const urlPar = document.createElement("p");
    const urlText = document.createTextNode(url);