Added query detail modal
This commit is contained in:
@@ -177,6 +177,47 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Query Details Modal -->
|
||||||
|
<div class="modal fade" id="queryDetailsModal" tabindex="-1" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-xl modal-dialog-scrollable">
|
||||||
|
<div class="modal-content">
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="queryDetailsTitle">Query Details</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
|
||||||
|
<!-- Access times -->
|
||||||
|
<h6>Access times</h6>
|
||||||
|
<ul id="queryAccessTimes" class="list-group mb-4"></ul>
|
||||||
|
|
||||||
|
<!-- Results -->
|
||||||
|
<h6>Results</h6>
|
||||||
|
<table class="table table-sm table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Score</th>
|
||||||
|
<th>Name</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="queryResultsBody"></tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">
|
||||||
|
Close
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
var domains = JSON.parse('@Html.Raw(System.Text.Json.JsonSerializer.Serialize(domains))');
|
var domains = JSON.parse('@Html.Raw(System.Text.Json.JsonSerializer.Serialize(domains))');
|
||||||
@@ -320,7 +361,7 @@
|
|||||||
btn.className = 'btn btn-sm btn-primary';
|
btn.className = 'btn btn-sm btn-primary';
|
||||||
btn.textContent = '@T["Details"]';
|
btn.textContent = '@T["Details"]';
|
||||||
btn.addEventListener('click', () => {
|
btn.addEventListener('click', () => {
|
||||||
runQuery(query);
|
showQueryDetails(query);
|
||||||
});
|
});
|
||||||
|
|
||||||
actionCell.appendChild(btn);
|
actionCell.appendChild(btn);
|
||||||
@@ -403,4 +444,57 @@
|
|||||||
);
|
);
|
||||||
modal.show();
|
modal.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showQueryDetails(query) {
|
||||||
|
// Title
|
||||||
|
document.getElementById('queryDetailsTitle').innerText =
|
||||||
|
`Query: ${query.Name}`;
|
||||||
|
|
||||||
|
/* ---------- Access times ---------- */
|
||||||
|
const accessList = document.getElementById('queryAccessTimes');
|
||||||
|
accessList.innerHTML = '';
|
||||||
|
|
||||||
|
if (!query.AccessDateTimes || query.AccessDateTimes.length === 0) {
|
||||||
|
accessList.innerHTML = `
|
||||||
|
<li class="list-group-item text-muted text-center">
|
||||||
|
No access times
|
||||||
|
</li>`;
|
||||||
|
} else {
|
||||||
|
query.AccessDateTimes.forEach(dt => {
|
||||||
|
const li = document.createElement('li');
|
||||||
|
li.className = 'list-group-item';
|
||||||
|
li.textContent = new Date(dt).toLocaleString();
|
||||||
|
accessList.appendChild(li);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------- Results ---------- */
|
||||||
|
const resultsBody = document.getElementById('queryResultsBody');
|
||||||
|
resultsBody.innerHTML = '';
|
||||||
|
|
||||||
|
if (!query.Results || query.Results.length === 0) {
|
||||||
|
resultsBody.innerHTML = `
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" class="text-muted text-center">
|
||||||
|
No results
|
||||||
|
</td>
|
||||||
|
</tr>`;
|
||||||
|
} else {
|
||||||
|
query.Results.forEach(r => {
|
||||||
|
const row = document.createElement('tr');
|
||||||
|
row.innerHTML = `
|
||||||
|
<td>${r.Score.toFixed(4)}</td>
|
||||||
|
<td class="text-break">${r.Name}</td>
|
||||||
|
`;
|
||||||
|
resultsBody.appendChild(row);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show modal
|
||||||
|
const modal = new bootstrap.Modal(
|
||||||
|
document.getElementById('queryDetailsModal')
|
||||||
|
);
|
||||||
|
modal.show();
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
Reference in New Issue
Block a user