Update app.py
Browse files
app.py
CHANGED
|
@@ -65,8 +65,10 @@ THREE_JS_TEMPLATE = """
|
|
| 65 |
|
| 66 |
// Make planets clickable
|
| 67 |
planetMesh.addEventListener('click', (event) => {
|
| 68 |
-
|
| 69 |
-
|
|
|
|
|
|
|
| 70 |
event.stopPropagation();
|
| 71 |
});
|
| 72 |
|
|
@@ -107,7 +109,6 @@ THREE_JS_TEMPLATE = """
|
|
| 107 |
renderer.setSize(window.innerWidth, window.innerHeight);
|
| 108 |
});
|
| 109 |
</script>
|
| 110 |
-
<input type="hidden" id="planet-data" value="">
|
| 111 |
</body>
|
| 112 |
</html>
|
| 113 |
"""
|
|
@@ -171,9 +172,6 @@ with gr.Blocks(title="Webspace Network 3D") as demo:
|
|
| 171 |
# Three.js renderer
|
| 172 |
html = gr.HTML(get_threejs_app())
|
| 173 |
|
| 174 |
-
# Hidden textbox to capture planet data
|
| 175 |
-
planet_data = gr.Textbox(visible=False)
|
| 176 |
-
|
| 177 |
# Navigation controls
|
| 178 |
system_slider = gr.Slider(0, len(universe['systems'])-1, step=1, label="Star System", value=0)
|
| 179 |
travel_btn = gr.Button("Engage Hyperdrive")
|
|
@@ -183,25 +181,6 @@ with gr.Blocks(title="Webspace Network 3D") as demo:
|
|
| 183 |
planet_info = gr.JSON(label="Selected Planet")
|
| 184 |
system_info = gr.JSON(label="Current System", value=universe['systems'][0])
|
| 185 |
|
| 186 |
-
# JavaScript to update planet data when clicked
|
| 187 |
-
demo.load(None, None, None, _js="""
|
| 188 |
-
function() {
|
| 189 |
-
const iframe = document.querySelector('iframe');
|
| 190 |
-
iframe.contentWindow.document.getElementById('planet-data').addEventListener('change', function() {
|
| 191 |
-
const planetData = this.value;
|
| 192 |
-
return planetData;
|
| 193 |
-
});
|
| 194 |
-
return null;
|
| 195 |
-
}
|
| 196 |
-
""", outputs=planet_data)
|
| 197 |
-
|
| 198 |
-
# Update planet info when data changes
|
| 199 |
-
planet_data.change(
|
| 200 |
-
lambda x: json.loads(x) if x else None,
|
| 201 |
-
inputs=planet_data,
|
| 202 |
-
outputs=planet_info
|
| 203 |
-
)
|
| 204 |
-
|
| 205 |
# Handle system travel
|
| 206 |
travel_btn.click(
|
| 207 |
lambda x: universe['systems'][x],
|
|
@@ -209,5 +188,22 @@ with gr.Blocks(title="Webspace Network 3D") as demo:
|
|
| 209 |
outputs=system_info
|
| 210 |
)
|
| 211 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
if __name__ == "__main__":
|
| 213 |
demo.launch()
|
|
|
|
| 65 |
|
| 66 |
// Make planets clickable
|
| 67 |
planetMesh.addEventListener('click', (event) => {
|
| 68 |
+
window.parent.postMessage({
|
| 69 |
+
type: 'planetSelected',
|
| 70 |
+
data: event.target.userData
|
| 71 |
+
}, '*');
|
| 72 |
event.stopPropagation();
|
| 73 |
});
|
| 74 |
|
|
|
|
| 109 |
renderer.setSize(window.innerWidth, window.innerHeight);
|
| 110 |
});
|
| 111 |
</script>
|
|
|
|
| 112 |
</body>
|
| 113 |
</html>
|
| 114 |
"""
|
|
|
|
| 172 |
# Three.js renderer
|
| 173 |
html = gr.HTML(get_threejs_app())
|
| 174 |
|
|
|
|
|
|
|
|
|
|
| 175 |
# Navigation controls
|
| 176 |
system_slider = gr.Slider(0, len(universe['systems'])-1, step=1, label="Star System", value=0)
|
| 177 |
travel_btn = gr.Button("Engage Hyperdrive")
|
|
|
|
| 181 |
planet_info = gr.JSON(label="Selected Planet")
|
| 182 |
system_info = gr.JSON(label="Current System", value=universe['systems'][0])
|
| 183 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 184 |
# Handle system travel
|
| 185 |
travel_btn.click(
|
| 186 |
lambda x: universe['systems'][x],
|
|
|
|
| 188 |
outputs=system_info
|
| 189 |
)
|
| 190 |
|
| 191 |
+
# Custom JavaScript for planet selection
|
| 192 |
+
demo._js = """
|
| 193 |
+
function() {
|
| 194 |
+
window.addEventListener('message', function(event) {
|
| 195 |
+
if (event.data.type === 'planetSelected') {
|
| 196 |
+
const planetData = JSON.stringify(event.data.data);
|
| 197 |
+
const iframe = document.querySelector('iframe');
|
| 198 |
+
const planetInfo = iframe.contentDocument.getElementById('planet-info');
|
| 199 |
+
if (planetInfo) {
|
| 200 |
+
planetInfo.value = planetData;
|
| 201 |
+
planetInfo.dispatchEvent(new Event('change'));
|
| 202 |
+
}
|
| 203 |
+
}
|
| 204 |
+
});
|
| 205 |
+
}
|
| 206 |
+
"""
|
| 207 |
+
|
| 208 |
if __name__ == "__main__":
|
| 209 |
demo.launch()
|