src/main/webapp/issue-search.js

changeset 362
576bd8ac4d96
parent 358
e46bef1bdddd
--- a/src/main/webapp/issue-search.js	Tue Mar 11 14:01:48 2025 +0100
+++ b/src/main/webapp/issue-search.js	Tue Mar 11 17:01:30 2025 +0100
@@ -25,21 +25,20 @@
 
 function debounce(func){
     let timer;
-    return () => {
+    return (...args) => {
         clearTimeout(timer);
-        timer = setTimeout(() => { func.apply(this); }, 300);
+        timer = setTimeout(() => { func.apply(this, args); }, 300);
     };
 }
 
-const issueSearch = debounce(() => issueSearchImpl())
 let searchBoxOldContent = '';
-function issueSearchImpl() {
-    const searchBox = document.getElementById('search-box');
+function issueSearchImpl(elementId, project) {
+    const searchBox = document.getElementById(elementId);
     if (searchBoxOldContent !== searchBox.value) {
         searchBoxOldContent = searchBox.value;
         const req = new XMLHttpRequest();
         req.addEventListener("load", (evt) => {
-            const dataList = document.getElementById('search-box-list');
+            const dataList = document.getElementById(elementId+'-list');
             dataList.innerHTML = '';
             JSON.parse(evt.target.responseText).forEach(function(item){
                 const option = document.createElement('option');
@@ -47,27 +46,36 @@
                 dataList.appendChild(option);
             });
         });
-        req.open("GET", baseHref+'issues/search?q='+encodeURIComponent(searchBox.value));
+        let url = baseHref+'issues/search?q='+encodeURIComponent(searchBox.value);
+        if (project > 0) url+='&p='+project;
+        req.open("GET", url);
         req.send();
     }
 }
+const issueSearch = debounce((elementId, project = 0) => issueSearchImpl(elementId, project))
+
+function configureSearchBox(elementId, project, navigateOnEnter = false) {
+    const searchBox = document.getElementById(elementId);
+    searchBox.addEventListener('change', () => issueSearch(elementId, project));
+    if (navigateOnEnter) {
+        searchBox.addEventListener('keyup', (evt) => {
+            if (evt.code === 'Enter' || evt.code === 'NumpadEnter') {
+                let stext = searchBox.value.trim()
+                if (stext.length === 0) return;
+                if (stext[0] === '#') stext = stext.substring(1);
+                const snum = Number.parseInt(stext.split(' ')[0], 10);
+                if (snum !== Number.NaN) {
+                    location.assign(baseHref + 'issues/' + snum + '?in_project=true');
+                }
+            } else {
+                issueSearch(elementId, project);
+            }
+        })
+    } else {
+        searchBox.addEventListener('keyup', () => issueSearch(elementId, project));
+    }
+}
 
-// configure the search box
-window.addEventListener('load', () => {
-    const searchBox = document.getElementById('search-box');
-    searchBox.addEventListener('change', () => issueSearch())
-    searchBox.addEventListener('keyup', (evt) => {
-        if (evt.code === 'Enter' || evt.code === 'NumpadEnter') {
-            let stext = searchBox.value.trim()
-            if (stext.length === 0) return;
-            if (stext[0] === '#') stext = stext.substring(1);
-            const snum = Number.parseInt(stext.split(' ')[0], 10);
-            if (snum !== Number.NaN) {
-                location.assign(baseHref+'issues/'+snum+'?in_project=true');
-            }
-        } else {
-            issueSearch();
-        }
-    })
-});
+// configure the global search box
+window.addEventListener('load', () => configureSearchBox('search-box', 0, true));
 

mercurial