Skip to content

Commit 99ad3fb

Browse files
committed
fix js loading, screensaver checks
1 parent d4fc09e commit 99ad3fb

File tree

4 files changed

+81
-65
lines changed

4 files changed

+81
-65
lines changed

cmd/server/main.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"gitmdm/internal/gitstore"
1515
"gitmdm/internal/viewmodels"
1616
"html/template"
17+
"io/fs"
1718
"log"
1819
"net/http"
1920
"os"
@@ -276,7 +277,12 @@ func main() {
276277
mux.HandleFunc("/health", server.handleHealth)
277278

278279
// Serve static files
279-
staticHandler := http.FileServer(http.FS(staticFiles))
280+
// Use Sub to get the static directory from the embedded filesystem
281+
staticFS, err := fs.Sub(staticFiles, "static")
282+
if err != nil {
283+
log.Fatalf("[ERROR] Failed to get static filesystem: %v", err)
284+
}
285+
staticHandler := http.FileServer(http.FS(staticFS))
280286
mux.Handle("/static/", http.StripPrefix("/static/", staticHandler))
281287

282288
srv := &http.Server{

cmd/server/static/device.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
function toggleCheck(header) {
2+
const checkItem = header.parentElement;
3+
checkItem.classList.toggle('expanded');
4+
}
5+
6+
document.addEventListener('DOMContentLoaded', function() {
7+
// Add click listeners to check headers
8+
document.querySelectorAll('.check-header').forEach(header => {
9+
header.addEventListener('click', function() {
10+
toggleCheck(this);
11+
});
12+
});
13+
14+
// Filter functionality
15+
document.querySelectorAll('.filter-btn').forEach(btn => {
16+
btn.addEventListener('click', function() {
17+
// Update active button
18+
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
19+
this.classList.add('active');
20+
21+
// Filter checks
22+
const filter = this.dataset.filter;
23+
document.querySelectorAll('.check-item').forEach(item => {
24+
if (filter === 'all' || item.dataset.status === filter) {
25+
item.style.display = '';
26+
} else {
27+
item.style.display = 'none';
28+
}
29+
});
30+
});
31+
});
32+
33+
// Auto-expand failed checks
34+
document.querySelectorAll('.check-item[data-status="fail"]').forEach(item => {
35+
// Optionally auto-expand failed checks
36+
// item.classList.add('expanded');
37+
});
38+
});

cmd/server/templates/device.html

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -523,21 +523,42 @@ <h2 class="checks-title">Compliance Checks</h2>
523523
{{if $check.Outputs}}
524524
<div class="detail-section">
525525
<div class="detail-section-title">Technical Details</div>
526-
{{range $output := $check.Outputs}}
527-
{{if or $output.Command $output.File}}
528-
<div class="command-block">
529-
<span class="command-prompt">$</span>
530-
{{if $output.Command}}{{$output.Command}}{{else}}cat {{$output.File}}{{end}}
531-
</div>
532-
{{end}}
533-
{{if $output.Stdout}}
534-
<div class="output-block">{{truncateLines $output.Stdout 30}}</div>
526+
{{if eq $result.Status "fail"}}
527+
{{/* For failed checks, only show the command that actually failed */}}
528+
{{range $output := $check.Outputs}}
529+
{{if and (ne $output.ExitCode 0) (ne $output.ExitCode -2)}}
530+
{{if or $output.Command $output.File}}
531+
<div class="command-block">
532+
<span class="command-prompt">$</span>
533+
{{if $output.Command}}{{$output.Command}}{{else}}cat {{$output.File}}{{end}}
534+
</div>
535+
{{end}}
536+
{{if $output.Stdout}}
537+
<div class="output-block">{{truncateLines $output.Stdout 30}}</div>
538+
{{end}}
539+
{{if $output.Stderr}}
540+
<div class="output-block error">{{truncateLines $output.Stderr 10}}</div>
541+
{{end}}
542+
{{end}}
535543
{{end}}
536-
{{if $output.Stderr}}
537-
{{if and (eq $output.ExitCode -2) (contains $output.Stderr "Skipped:")}}
538-
<div class="output-block" style="color: var(--color-fg-muted); font-style: italic;">{{$output.Stderr}}</div>
539-
{{else}}
540-
<div class="output-block error">{{truncateLines $output.Stderr 10}}</div>
544+
{{else}}
545+
{{/* For non-failed checks, show all outputs */}}
546+
{{range $output := $check.Outputs}}
547+
{{if or $output.Command $output.File}}
548+
<div class="command-block">
549+
<span class="command-prompt">$</span>
550+
{{if $output.Command}}{{$output.Command}}{{else}}cat {{$output.File}}{{end}}
551+
</div>
552+
{{end}}
553+
{{if $output.Stdout}}
554+
<div class="output-block">{{truncateLines $output.Stdout 30}}</div>
555+
{{end}}
556+
{{if $output.Stderr}}
557+
{{if and (eq $output.ExitCode -2) (contains $output.Stderr "Skipped:")}}
558+
<div class="output-block" style="color: var(--color-fg-muted); font-style: italic;">{{$output.Stderr}}</div>
559+
{{else}}
560+
<div class="output-block error">{{truncateLines $output.Stderr 10}}</div>
561+
{{end}}
541562
{{end}}
542563
{{end}}
543564
{{end}}

cmd/server/templates/index.html

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -595,55 +595,6 @@ <h2 class="empty-state-title">No Devices Found</h2>
595595
{{end}}
596596
</div>
597597

598-
<script>
599-
// Search functionality
600-
const searchInput = document.getElementById('searchInput');
601-
let searchTimeout;
602-
603-
searchInput?.addEventListener('input', function() {
604-
clearTimeout(searchTimeout);
605-
searchTimeout = setTimeout(() => {
606-
const searchValue = this.value.trim();
607-
const urlParams = new URLSearchParams(window.location.search);
608-
609-
if (searchValue) {
610-
urlParams.set('search', searchValue);
611-
} else {
612-
urlParams.delete('search');
613-
}
614-
615-
urlParams.delete('page'); // Reset to page 1
616-
window.location.search = urlParams.toString();
617-
}, 500); // Debounce search
618-
});
619-
620-
// Filter tabs
621-
document.querySelectorAll('.filter-tab').forEach(tab => {
622-
tab.addEventListener('click', function() {
623-
const status = this.dataset.status;
624-
const urlParams = new URLSearchParams(window.location.search);
625-
626-
if (status) {
627-
urlParams.set('status', status);
628-
} else {
629-
urlParams.delete('status');
630-
}
631-
632-
urlParams.delete('page'); // Reset to page 1
633-
window.location.search = urlParams.toString();
634-
});
635-
});
636-
637-
// Clear search on Escape key
638-
document.addEventListener('keydown', function(e) {
639-
if (e.key === 'Escape' && searchInput) {
640-
searchInput.value = '';
641-
const urlParams = new URLSearchParams(window.location.search);
642-
urlParams.delete('search');
643-
urlParams.delete('page');
644-
window.location.search = urlParams.toString();
645-
}
646-
});
647-
</script>
598+
<script src="/static/index.js"></script>
648599
</body>
649600
</html>

0 commit comments

Comments
 (0)