ewebspace commited on
Commit
22eec41
·
verified ·
1 Parent(s): 9f95d59

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -25
app.py CHANGED
@@ -65,8 +65,10 @@ THREE_JS_TEMPLATE = """
65
 
66
  // Make planets clickable
67
  planetMesh.addEventListener('click', (event) => {
68
- document.getElementById('planet-data').value = JSON.stringify(event.target.userData);
69
- document.getElementById('planet-data').dispatchEvent(new Event('change'));
 
 
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()