From 23199338ec5f63235640987a2a057c5e9e41de2d Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 22 Mar 2026 23:57:03 +0000 Subject: [PATCH] Ripley --- .../__pycache__/resolution.cpython-311.pyc | Bin 7573 -> 6548 bytes core/services/resolution.py | 126 ++++++------------ core/templates/core/dashboard.html | 33 ++++- 3 files changed, 68 insertions(+), 91 deletions(-) diff --git a/core/services/__pycache__/resolution.cpython-311.pyc b/core/services/__pycache__/resolution.cpython-311.pyc index 19de47f67babd88d4acca075740ac0475fdf876f..2a2dc897ee52ec842e37878f0a5aa6e76ac07c9b 100644 GIT binary patch delta 3275 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
@@ -18,7 +19,12 @@
Network Discovery
- +
@@ -43,13 +49,32 @@ document.getElementById('searchForm').addEventListener('submit', function(e) { e.preventDefault(); const query = document.getElementById('searchInput').value; const graphContainer = d3.select("#graphContainer"); - graphContainer.html('

Discovering network...

'); + const searchBtn = document.getElementById('searchBtn'); + const btnText = document.getElementById('btnText'); + const loader = document.getElementById('loader'); + + // UI Loading state + searchBtn.disabled = true; + btnText.textContent = "Searching..."; + loader.style.display = "inline-block"; + graphContainer.html('

Discovering network, please wait...

'); fetch(`{% url 'core:search_api' %}?q=${encodeURIComponent(query)}`) - .then(response => response.json()) + .then(response => { + if (!response.ok) throw new Error("Search failed"); + return response.json(); + }) .then(data => { graphContainer.html(''); // clear renderGraph(data); + }) + .catch(err => { + graphContainer.html(`

Error: ${err.message}

`); + }) + .finally(() => { + searchBtn.disabled = false; + btnText.textContent = "Discover"; + loader.style.display = "none"; }); }); @@ -135,4 +160,4 @@ function renderGraph(data) { } } -{% endblock %} +{% endblock %} \ No newline at end of file