fix: Preserve 3D plot camera position and fix CSS loading
Two fixes for the vector visualization page: 1. **CSS Loading Fix**: Moved CSS <link> from vector_viz.html fragment to user_info.html <head> block. HTMX fragments don't process <link> tags in <head>, causing unstyled page. Now CSS loads correctly. 2. **Camera Preservation**: Modified renderPlot() to preserve camera position when toggling query point visibility. Previously, toggling the "Show Query Point" checkbox would reset zoom/rotation to default. Now reads existing camera settings from plot before updating. Related: nextcloud_mcp_server/auth/static/vector-viz.js:123-130 Related: nextcloud_mcp_server/auth/templates/user_info.html:12 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -6,4 +6,4 @@
|
|||||||
|
|
||||||
!nextcloud_mcp_server/**/*.py
|
!nextcloud_mcp_server/**/*.py
|
||||||
!nextcloud_mcp_server/**/*.html
|
!nextcloud_mcp_server/**/*.html
|
||||||
!nextcloud_mcp_server/auth/static/*.png
|
!nextcloud_mcp_server/auth/static/*
|
||||||
|
|||||||
@@ -120,15 +120,22 @@ function vizApp() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Preserve camera position if plot already exists
|
||||||
|
const plotDiv = document.getElementById('viz-plot');
|
||||||
|
let cameraSettings = { eye: { x: 1.5, y: 1.5, z: 1.5 } }; // Default camera position
|
||||||
|
|
||||||
|
if (plotDiv && plotDiv.layout && plotDiv.layout.scene && plotDiv.layout.scene.camera) {
|
||||||
|
// Plot exists and has been interacted with - preserve current camera
|
||||||
|
cameraSettings = plotDiv.layout.scene.camera;
|
||||||
|
}
|
||||||
|
|
||||||
const layout = {
|
const layout = {
|
||||||
title: `Vector Space (PCA 3D) - ${results.length} results`,
|
title: `Vector Space (PCA 3D) - ${results.length} results`,
|
||||||
scene: {
|
scene: {
|
||||||
xaxis: { title: 'PC1' },
|
xaxis: { title: 'PC1' },
|
||||||
yaxis: { title: 'PC2' },
|
yaxis: { title: 'PC2' },
|
||||||
zaxis: { title: 'PC3' },
|
zaxis: { title: 'PC3' },
|
||||||
camera: {
|
camera: cameraSettings
|
||||||
eye: { x: 1.5, y: 1.5, z: 1.5 }
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
hovermode: 'closest',
|
hovermode: 'closest',
|
||||||
autosize: true, // Enable auto-sizing to fit container
|
autosize: true, // Enable auto-sizing to fit container
|
||||||
@@ -145,7 +152,9 @@ function vizApp() {
|
|||||||
displayModeBar: true
|
displayModeBar: true
|
||||||
};
|
};
|
||||||
|
|
||||||
Plotly.newPlot('viz-plot', traces, layout, config);
|
// Use Plotly.react() instead of newPlot() to preserve camera position
|
||||||
|
// when toggling query point visibility
|
||||||
|
Plotly.react('viz-plot', traces, layout, config);
|
||||||
},
|
},
|
||||||
|
|
||||||
getNextcloudUrl(result) {
|
getNextcloudUrl(result) {
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
|
|
||||||
<!-- Plotly.js for vector visualization -->
|
<!-- Plotly.js for vector visualization -->
|
||||||
<script src="https://cdn.plot.ly/plotly-3.3.0.min.js"></script>
|
<script src="https://cdn.plot.ly/plotly-3.3.0.min.js"></script>
|
||||||
|
|
||||||
|
<!-- Vector Viz static assets -->
|
||||||
|
<link rel="stylesheet" href="/app/static/vector-viz.css">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block extra_styles %}
|
{% block extra_styles %}
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
<link rel="stylesheet" href="/app/static/vector-viz.css">
|
|
||||||
|
|
||||||
<div x-data="vizApp()">
|
<div x-data="vizApp()">
|
||||||
<div class="viz-layout">
|
<div class="viz-layout">
|
||||||
<!-- Top: Search Controls -->
|
<!-- Top: Search Controls -->
|
||||||
|
|||||||
Reference in New Issue
Block a user