gioser-graph-web: fix web-sys feature casing and compilation
- SvgSvgElement → SvgsvgElement - Add Response feature - Make color owned String for closure lifetime
This commit is contained in:
@@ -21,13 +21,14 @@ features = [
|
|||||||
"Element",
|
"Element",
|
||||||
"HtmlElement",
|
"HtmlElement",
|
||||||
"SvgElement",
|
"SvgElement",
|
||||||
"SvgSvgElement",
|
"SvgsvgElement",
|
||||||
"SvgCircleElement",
|
"SvgCircleElement",
|
||||||
"SvgLineElement",
|
"SvgLineElement",
|
||||||
"SvgTextElement",
|
"SvgTextElement",
|
||||||
"SvgTextContentElement",
|
"SvgTextContentElement",
|
||||||
"SvgGraphicsElement",
|
"SvgGraphicsElement",
|
||||||
"Node",
|
"Node",
|
||||||
|
"Response",
|
||||||
"CssStyleDeclaration",
|
"CssStyleDeclaration",
|
||||||
"DomRect",
|
"DomRect",
|
||||||
"Event",
|
"Event",
|
||||||
|
|||||||
@@ -34,10 +34,16 @@ use wasm_bindgen::prelude::*;
|
|||||||
use wasm_bindgen::JsCast;
|
use wasm_bindgen::JsCast;
|
||||||
use wasm_bindgen_futures::JsFuture;
|
use wasm_bindgen_futures::JsFuture;
|
||||||
use web_sys::{
|
use web_sys::{
|
||||||
Document, Element, HtmlElement, MouseEvent, SvgCircleElement, SvgElement, SvgLineElement,
|
Document, HtmlElement, MouseEvent, Response, SvgCircleElement, SvgLineElement,
|
||||||
SvgSvgElement, SvgTextElement, Window,
|
SvgsvgElement, SvgTextElement,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Helper para obtener el document desde web-sys. Se llama desde los métodos
|
||||||
|
/// de GraphWidget sin depender de la referencia pasada (aunque la tenemos).
|
||||||
|
pub(crate) fn document() -> Option<Document> {
|
||||||
|
web_sys::window().and_then(|w| w.document())
|
||||||
|
}
|
||||||
|
|
||||||
// ─── Tipos de respuesta de `/graph` ──────────────────────────────
|
// ─── Tipos de respuesta de `/graph` ──────────────────────────────
|
||||||
|
|
||||||
#[derive(Deserialize, Debug, Clone)]
|
#[derive(Deserialize, Debug, Clone)]
|
||||||
@@ -116,7 +122,7 @@ fn camino_color(camino: &str) -> &str {
|
|||||||
pub struct GraphWidget {
|
pub struct GraphWidget {
|
||||||
container: HtmlElement,
|
container: HtmlElement,
|
||||||
api_url: String,
|
api_url: String,
|
||||||
svg: Option<SvgSvgElement>,
|
svg: Option<SvgsvgElement>,
|
||||||
nodes: Vec<NodeData>,
|
nodes: Vec<NodeData>,
|
||||||
edges: Vec<EdgeData>,
|
edges: Vec<EdgeData>,
|
||||||
on_navigate: NavCallback,
|
on_navigate: NavCallback,
|
||||||
@@ -195,7 +201,7 @@ impl GraphWidget {
|
|||||||
let positions = force_layout(&self.nodes, &self.edges, CANVAS_W, CANVAS_H);
|
let positions = force_layout(&self.nodes, &self.edges, CANVAS_W, CANVAS_H);
|
||||||
|
|
||||||
let ns = "http://www.w3.org/2000/svg";
|
let ns = "http://www.w3.org/2000/svg";
|
||||||
let svg: SvgSvgElement = self
|
let svg: SvgsvgElement = self
|
||||||
.document
|
.document
|
||||||
.create_element_ns(Some(ns), "svg")
|
.create_element_ns(Some(ns), "svg")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
@@ -255,7 +261,7 @@ impl GraphWidget {
|
|||||||
let on_nav = self.on_navigate.clone();
|
let on_nav = self.on_navigate.clone();
|
||||||
for (i, node) in self.nodes.iter().enumerate() {
|
for (i, node) in self.nodes.iter().enumerate() {
|
||||||
let (x, y) = positions.get(i).map(|(_, p)| *p).unwrap_or((100.0, 100.0));
|
let (x, y) = positions.get(i).map(|(_, p)| *p).unwrap_or((100.0, 100.0));
|
||||||
let color = camino_color(&node.camino);
|
let color = camino_color(&node.camino).to_string();
|
||||||
|
|
||||||
// Círculo
|
// Círculo
|
||||||
let circle: SvgCircleElement = self
|
let circle: SvgCircleElement = self
|
||||||
@@ -267,9 +273,9 @@ impl GraphWidget {
|
|||||||
circle.set_attribute("cx", &format!("{:.1}", x)).ok();
|
circle.set_attribute("cx", &format!("{:.1}", x)).ok();
|
||||||
circle.set_attribute("cy", &format!("{:.1}", y)).ok();
|
circle.set_attribute("cy", &format!("{:.1}", y)).ok();
|
||||||
circle.set_attribute("r", &format!("{:.1}", NODE_RADIUS)).ok();
|
circle.set_attribute("r", &format!("{:.1}", NODE_RADIUS)).ok();
|
||||||
circle.set_attribute("fill", color).ok();
|
circle.set_attribute("fill", &color).ok();
|
||||||
circle.set_attribute("fill-opacity", "0.35").ok();
|
circle.set_attribute("fill-opacity", "0.35").ok();
|
||||||
circle.set_attribute("stroke", color).ok();
|
circle.set_attribute("stroke", &color).ok();
|
||||||
circle.set_attribute("stroke-width", "2").ok();
|
circle.set_attribute("stroke-width", "2").ok();
|
||||||
circle.set_attribute("cursor", "pointer").ok();
|
circle.set_attribute("cursor", "pointer").ok();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user