mirror of
https://github.com/status-im/whispervis.git
synced 2025-02-01 16:04:56 +00:00
Fix upload and initialization
This commit is contained in:
parent
8229e5ce45
commit
098a817008
1
main.go
1
main.go
@ -11,5 +11,4 @@ func main() {
|
||||
vecty.AddStylesheet("css/pure-min.css")
|
||||
vecty.AddStylesheet("css/controls.css")
|
||||
vecty.RenderBody(page)
|
||||
page.UpdateNetworkGraph(inputJSON)
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ func NewNetworkSelector(handler func(*Network)) *NetworkSelector {
|
||||
handler: handler,
|
||||
}
|
||||
ns.upload = widgets.NewUploadWidget(ns.onUpload)
|
||||
ns.setCurrentNetwork(current)
|
||||
return ns
|
||||
}
|
||||
|
||||
@ -61,8 +62,8 @@ func (n *NetworkSelector) Render() vecty.ComponentOrHTML {
|
||||
),
|
||||
),
|
||||
n.descriptionBlock(),
|
||||
elem.HorizontalRule(),
|
||||
vecty.If(n.isCustom, n.upload),
|
||||
elem.HorizontalRule(),
|
||||
)
|
||||
}
|
||||
|
||||
@ -77,26 +78,6 @@ func (n *NetworkSelector) descriptionBlock() *vecty.HTML {
|
||||
)
|
||||
}
|
||||
|
||||
// onChange implements handler for select input changed value
|
||||
func (n *NetworkSelector) onChange(e *vecty.Event) {
|
||||
value := e.Target.Get("value").String()
|
||||
|
||||
if value == "upload" {
|
||||
n.isCustom = true
|
||||
vecty.Rerender(n)
|
||||
return
|
||||
}
|
||||
|
||||
n.isCustom = false
|
||||
n.current = n.networks[value]
|
||||
|
||||
if n.handler != nil {
|
||||
go n.handler(n.current)
|
||||
}
|
||||
|
||||
vecty.Rerender(n)
|
||||
}
|
||||
|
||||
// LoadNetworks imports preloaded neworks from the directory with JSON files.
|
||||
func LoadNetworks() (map[string]*Network, error) {
|
||||
files, err := AssetDir("data")
|
||||
@ -118,11 +99,12 @@ func LoadNetworks() (map[string]*Network, error) {
|
||||
|
||||
func (n *NetworkSelector) networkOptions() vecty.List {
|
||||
var options vecty.List
|
||||
for name, _ := range n.networks {
|
||||
for name := range n.networks {
|
||||
fmt.Printf("'%s' == '%s'\n", n.current.Name, name)
|
||||
options = append(options, elem.Option(
|
||||
vecty.Markup(
|
||||
vecty.Property("value", name),
|
||||
vecty.Property("selected", n.current.Name == name),
|
||||
vecty.Property("selected", n.current.Name == "data/"+name), // TODO(divan): get rid of "data"
|
||||
),
|
||||
vecty.Text(name),
|
||||
))
|
||||
@ -130,6 +112,24 @@ func (n *NetworkSelector) networkOptions() vecty.List {
|
||||
return options
|
||||
}
|
||||
|
||||
// onChange implements handler for select input changed value
|
||||
func (n *NetworkSelector) onChange(e *vecty.Event) {
|
||||
value := e.Target.Get("value").String()
|
||||
|
||||
if value == "upload" {
|
||||
n.isCustom = true
|
||||
vecty.Rerender(n)
|
||||
return
|
||||
}
|
||||
|
||||
n.isCustom = false
|
||||
|
||||
net := n.networks[value]
|
||||
n.setCurrentNetwork(net)
|
||||
|
||||
vecty.Rerender(n)
|
||||
}
|
||||
|
||||
// onUpload implements callback for "Upload" button clicked event.
|
||||
func (n *NetworkSelector) onUpload(json []byte) {
|
||||
r := bytes.NewReader(json)
|
||||
@ -139,12 +139,18 @@ func (n *NetworkSelector) onUpload(json []byte) {
|
||||
}
|
||||
|
||||
net.Name = fmt.Sprintf("Uploaded (%d nodes)", net.NodesCount())
|
||||
|
||||
n.networks[net.Name] = net
|
||||
n.setCurrentNetwork(net)
|
||||
|
||||
vecty.Rerender(n)
|
||||
}
|
||||
|
||||
// setCurrentNetwork changes current network and runs needed update handlers.
|
||||
func (n *NetworkSelector) setCurrentNetwork(net *Network) {
|
||||
n.current = net
|
||||
|
||||
if n.handler != nil {
|
||||
go n.handler(n.current)
|
||||
}
|
||||
|
||||
vecty.Rerender(n)
|
||||
}
|
||||
|
24
page.go
24
page.go
@ -1,10 +1,8 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
"github.com/divan/graphx/formats"
|
||||
"github.com/divan/graphx/graph"
|
||||
"github.com/divan/graphx/layout"
|
||||
"github.com/gopherjs/vecty"
|
||||
@ -25,7 +23,6 @@ type Page struct {
|
||||
|
||||
loader *widgets.Loader
|
||||
forceEditor *widgets.ForceEditor
|
||||
upload *widgets.UploadWidget
|
||||
network *NetworkSelector
|
||||
|
||||
data *graph.Graph
|
||||
@ -37,7 +34,6 @@ func NewPage() *Page {
|
||||
loader: widgets.NewLoader(),
|
||||
forceEditor: widgets.NewForceEditor(),
|
||||
}
|
||||
page.upload = widgets.NewUploadWidget(page.onUpload)
|
||||
page.network = NewNetworkSelector(page.onNetworkChange)
|
||||
page.webgl = NewWebGLScene()
|
||||
return page
|
||||
@ -56,7 +52,6 @@ func (p *Page) Render() vecty.ComponentOrHTML {
|
||||
elem.Heading1(vecty.Text("Whisper Message Propagation")),
|
||||
elem.Paragraph(vecty.Text("This visualization represents message propagation in the p2p network.")),
|
||||
p.network,
|
||||
p.upload,
|
||||
elem.Div(
|
||||
vecty.Markup(
|
||||
vecty.MarkupIf(!p.loaded, vecty.Style("visibility", "hidden")),
|
||||
@ -118,26 +113,9 @@ func (p *Page) onUpdateClick(e *vecty.Event) {
|
||||
}
|
||||
|
||||
func (p *Page) onNetworkChange(network *Network) {
|
||||
fmt.Println("Network changed:", network)
|
||||
p.data = network.Data
|
||||
if !p.loaded {
|
||||
return
|
||||
}
|
||||
config := p.forceEditor.Config()
|
||||
p.layout = layout.NewFromConfig(p.data, config.Config)
|
||||
go p.StartSimulation()
|
||||
}
|
||||
|
||||
// UpdateNetworkGraph updates graph and scene with new data.
|
||||
func (p *Page) UpdateNetworkGraph(json []byte) error {
|
||||
buf := bytes.NewBuffer(json)
|
||||
data, err := formats.FromD3JSONReader(buf)
|
||||
if err != nil {
|
||||
return fmt.Errorf("update graph: %v", err)
|
||||
}
|
||||
|
||||
p.data = data
|
||||
config := p.forceEditor.Config()
|
||||
p.layout = layout.NewFromConfig(data, config.Config)
|
||||
go p.StartSimulation()
|
||||
return nil
|
||||
}
|
||||
|
14
upload.go
14
upload.go
@ -1,14 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// onUpload implements callback for "Upload" button clicked event.
|
||||
func (p *Page) onUpload(json []byte) {
|
||||
if err := p.UpdateNetworkGraph(json); err != nil {
|
||||
fmt.Println("[ERROR] Failed to process network.json:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("Uploaded new network graph")
|
||||
}
|
208
whispervis.js
208
whispervis.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -30,7 +30,6 @@ func (l *ForceEditor) Render() vecty.ComponentOrHTML {
|
||||
elem.Heading3(
|
||||
vecty.Text("Layout forces:"),
|
||||
),
|
||||
elem.HorizontalRule(),
|
||||
elem.Form(
|
||||
vecty.Markup(
|
||||
vecty.Class("pure-form"),
|
||||
@ -43,7 +42,7 @@ func (l *ForceEditor) Render() vecty.ComponentOrHTML {
|
||||
)
|
||||
}
|
||||
|
||||
// NewForcesEditor creates a new ForceEditor widget.
|
||||
// NewForceEditor creates a new ForceEditor widget.
|
||||
func NewForceEditor() *ForceEditor {
|
||||
config := DefaultForcesConfig
|
||||
repelling := NewForceInput("Gravity force:", config.Repelling)
|
||||
|
Loading…
x
Reference in New Issue
Block a user