Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
purescript-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
153
Issues
153
List
Board
Labels
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
purescript-gargantext
Commits
2a34e358
Commit
2a34e358
authored
Jun 27, 2019
by
James Laver
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
push for anoe
parent
eb515992
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
59 additions
and
12 deletions
+59
-12
Sigmajs.js
src/Gargantext/Components/GraphExplorer/Sigmajs.js
+2
-0
Sigmajs.purs
src/Gargantext/Components/GraphExplorer/Sigmajs.purs
+14
-0
Graph.purs
src/Gargantext/Pages/Corpus/Graph.purs
+43
-12
No files found.
src/Gargantext/Components/GraphExplorer/Sigmajs.js
View file @
2a34e358
'use strict'
;
'use strict'
;
exports
.
objectCreate
=
function
(
a
)
{
return
Object
.
create
(
a
);
};
var
dummyClass
=
'DummyClass'
;
var
dummyClass
=
'DummyClass'
;
exports
.
edgeShapesClass
=
dummyClass
;
exports
.
edgeShapesClass
=
dummyClass
;
exports
.
filterClass
=
dummyClass
;
exports
.
filterClass
=
dummyClass
;
...
...
src/Gargantext/Components/GraphExplorer/Sigmajs.purs
View file @
2a34e358
...
@@ -3,6 +3,7 @@ module Gargantext.Components.GraphExplorer.Sigmajs where
...
@@ -3,6 +3,7 @@ module Gargantext.Components.GraphExplorer.Sigmajs where
import Prelude
import Prelude
import Data.Nullable (Nullable)
import Data.Nullable (Nullable)
import DOM.Simple.Console (log, log2)
import Effect (Effect)
import Effect (Effect)
import Effect.Uncurried (EffectFn1, EffectFn2, mkEffectFn1, runEffectFn1)
import Effect.Uncurried (EffectFn1, EffectFn2, mkEffectFn1, runEffectFn1)
import React (Children, ReactClass, ReactElement, ReactRef, SyntheticEventHandler, createElement, unsafeCreateElement)
import React (Children, ReactClass, ReactElement, ReactRef, SyntheticEventHandler, createElement, unsafeCreateElement)
...
@@ -10,6 +11,7 @@ import React.SyntheticEvent (SyntheticMouseEvent)
...
@@ -10,6 +11,7 @@ import React.SyntheticEvent (SyntheticMouseEvent)
import Record.Unsafe (unsafeGet)
import Record.Unsafe (unsafeGet)
import Thermite (EventHandler)
import Thermite (EventHandler)
import Unsafe.Coerce (unsafeCoerce)
import Unsafe.Coerce (unsafeCoerce)
import FFI.Simple ((...))
import Gargantext.Types (class Optional)
import Gargantext.Types (class Optional)
foreign import edgeShapesClass :: forall props. ReactClass props
foreign import edgeShapesClass :: forall props. ReactClass props
...
@@ -246,6 +248,11 @@ sigmaEdge = unsafeCoerce
...
@@ -246,6 +248,11 @@ sigmaEdge = unsafeCoerce
sigmaSettings :: forall o. Optional o SigmaSettingProps => { | o } -> SigmaSettings
sigmaSettings :: forall o. Optional o SigmaSettingProps => { | o } -> SigmaSettings
sigmaSettings = unsafeCoerce
sigmaSettings = unsafeCoerce
reviseSettings :: SigmaSettings -> SigmaSettings
reviseSettings = objectCreate
foreign import objectCreate :: forall a. a -> a
foreign import data SigmaStyle :: Type
foreign import data SigmaStyle :: Type
type CameraProps =
type CameraProps =
...
@@ -262,6 +269,12 @@ type CameraInstance = { | CameraInstance' }
...
@@ -262,6 +269,12 @@ type CameraInstance = { | CameraInstance' }
foreign import setSigmaRef :: EffectFn1 (Nullable ReactRef) Unit
foreign import setSigmaRef :: EffectFn1 (Nullable ReactRef) Unit
foreign import getSigmaRef :: Effect SigmaInstance
foreign import getSigmaRef :: Effect SigmaInstance
foreign import sigmaOnMouseMove :: {cursorSize :: Number} -> SyntheticMouseEvent -> Effect Unit
foreign import sigmaOnMouseMove :: {cursorSize :: Number} -> SyntheticMouseEvent -> Effect Unit
refresh :: SigmaInstance -> Effect Unit
refresh s = do
log "Force refreshing sigma instance"
pure (s ... "refresh" $ [])
cameras :: SigmaInstance -> Array CameraInstance
cameras :: SigmaInstance -> Array CameraInstance
cameras = unsafeGet "cameras"
cameras = unsafeGet "cameras"
...
@@ -436,4 +449,5 @@ type SigmaSettingProps =
...
@@ -436,4 +449,5 @@ type SigmaSettingProps =
, twNodesGreyOpacity :: Number
, twNodesGreyOpacity :: Number
, twBorderGreyColor :: String
, twBorderGreyColor :: String
, twEdgeGreyColor :: String
, twEdgeGreyColor :: String
, gargRevision :: Int
)
)
src/Gargantext/Pages/Corpus/Graph.purs
View file @
2a34e358
...
@@ -16,10 +16,11 @@ import Data.Set (Set)
...
@@ -16,10 +16,11 @@ import Data.Set (Set)
import Data.Set as Set
import Data.Set as Set
import Data.Symbol (SProxy(..))
import Data.Symbol (SProxy(..))
import Data.Traversable (for_)
import Data.Traversable (for_)
import DOM.Simple.Console (log2)
import Effect (Effect)
import Effect (Effect)
import Effect.Aff (Aff)
import Effect.Aff (Aff)
import Effect.Class (liftEffect)
import Effect.Class (liftEffect)
import Gargantext.Components.GraphExplorer.Sigmajs (Color(Color), SigmaEasing, SigmaGraphData(SigmaGraphData), SigmaNode, SigmaSettings, canvas, edgeShape, edgeShapes, forceAtlas2, setSigmaRef, getSigmaRef, cameras, CameraProps, getCameraProps, goTo, pauseForceAtlas2, sStyle, sigmaOnMouseMove, sigma, sigmaEasing, sigmaEdge, sigmaEnableWebGL, sigmaNode, sigmaSettings)
import Gargantext.Components.GraphExplorer.Sigmajs (Color(Color), SigmaEasing, SigmaGraphData(SigmaGraphData), SigmaNode, SigmaSettings, canvas, edgeShape, edgeShapes, forceAtlas2, setSigmaRef, getSigmaRef, cameras, CameraProps, getCameraProps, goTo, pauseForceAtlas2, sStyle, sigmaOnMouseMove, sigma, sigmaEasing, sigmaEdge, sigmaEnableWebGL, sigmaNode, sigmaSettings
, refresh, reviseSettings
)
import Gargantext.Components.GraphExplorer.Types (Cluster(..), MetaData(..), Edge(..), GraphData(..), Legend(..), Node(..), getLegendData)
import Gargantext.Components.GraphExplorer.Types (Cluster(..), MetaData(..), Edge(..), GraphData(..), Legend(..), Node(..), getLegendData)
import Gargantext.Components.Login.Types (AuthData(..), TreeId)
import Gargantext.Components.Login.Types (AuthData(..), TreeId)
import Gargantext.Components.RandomText (words)
import Gargantext.Components.RandomText (words)
...
@@ -146,6 +147,20 @@ initialState = State
...
@@ -146,6 +147,20 @@ initialState = State
, settings : mySettings
, settings : mySettings
}
}
revise :: State -> State
revise (State s) = State $ s { settings = reviseSettings s.settings }
maybeRevise :: State -> Boolean -> State
maybeRevise s true = revise s
maybeRevise s false = s
selectNode :: SelectedNode -> State -> State
selectNode selectedNode (State s) = maybeRevise state (s.selectedNodes /= selectedNodes)
where
set = if s.multiNodeSelection then s.selectedNodes else Set.empty
selectedNodes = toggleSet selectedNode set
sigmaGraphData = Just $ convert selectedNodes s.graphData
state = State $ s { sigmaGraphData=sigmaGraphData }
-- This one is not used: specOld is the one being used.
-- This one is not used: specOld is the one being used.
-- TODO: code duplication
-- TODO: code duplication
{-
{-
...
@@ -161,19 +176,26 @@ performAction (LoadGraph fp) _ _ = void do
...
@@ -161,19 +176,26 @@ performAction (LoadGraph fp) _ _ = void do
treeResp <- liftEffect $ getAuthData
treeResp <- liftEffect $ getAuthData
case treeResp of
case treeResp of
Just (AuthData {token,tree_id }) ->
Just (AuthData {token,tree_id }) ->
modifyState \(State s) -> State s {graphData = resp, sigmaGraphData = Just $ convert resp, legendData = getLegendData resp, treeId = Just tree_id}
modifyState \(State s) ->
State s
{ graphData = resp
, sigmaGraphData = Just $ convert Set.empty resp
, legendData = getLegendData resp
, treeId = Just tree_id }
Nothing ->
Nothing ->
modifyState \(State s) -> State s { graphData = resp, sigmaGraphData = Just $ convert resp, legendData = getLegendData resp, treeId = Nothing}
modifyState \(State s) ->
State s
{ graphData = resp
, sigmaGraphData = Just $ convert Set.empty resp
, legendData = getLegendData resp
, treeId = Nothing}
-- TODO: here one might `catchError getNodes` to visually empty the
-- TODO: here one might `catchError getNodes` to visually empty the
-- graph.
-- graph.
--modifyState \(State s) -> State s {graphData = resp, sigmaGraphData = Just $ convert resp, legendData = getLegendData resp}
--modifyState \(State s) -> State s {graphData = resp, sigmaGraphData = Just $ convert resp, legendData = getLegendData resp}
performAction (SelectNode selectedNode@(SelectedNode node)) _ (State state) =
performAction (SelectNode selectedNode@(SelectedNode node)) _ (State state) = void do
modifyState_ $ \(State s) ->
modifyState_ (selectNode selectedNode)
State s {selectedNodes = toggleSet selectedNode
(if s.multiNodeSelection then s.selectedNodes
else Set.empty) }
performAction (ShowSidePanel b) _ (State state) = void do
performAction (ShowSidePanel b) _ (State state) = void do
modifyState $ \(State s) -> State s {showSidePanel = b }
modifyState $ \(State s) -> State s {showSidePanel = b }
...
@@ -211,8 +233,11 @@ performAction (ChangeCursorSize size) _ _ =
...
@@ -211,8 +233,11 @@ performAction (ChangeCursorSize size) _ _ =
-- modifyState_ $ \() -> do
-- modifyState_ $ \() -> do
-- State $
-- State $
convert :: GraphData -> SigmaGraphData
selNode :: Node -> SelectedNode
convert (GraphData r) = SigmaGraphData {nodes, edges}
selNode (Node n) = SelectedNode { id: n.id_, label: n.label }
convert :: Set.Set SelectedNode -> GraphData -> SigmaGraphData
convert selectedNodes (GraphData r) = SigmaGraphData {nodes, edges}
where
where
nodes = mapWithIndex nodeFn r.nodes
nodes = mapWithIndex nodeFn r.nodes
nodeFn i (Node n) =
nodeFn i (Node n) =
...
@@ -222,12 +247,18 @@ convert (GraphData r) = SigmaGraphData {nodes, edges}
...
@@ -222,12 +247,18 @@ convert (GraphData r) = SigmaGraphData {nodes, edges}
, label : n.label
, label : n.label
, x : n.x -- cos (toNumber i)
, x : n.x -- cos (toNumber i)
, y : n.y -- sin (toNumber i)
, y : n.y -- sin (toNumber i)
, color : intColor $ cDef n.attributes
, color
-- , labelColor
}
}
where
where
isSelected = Set.member (selNode (Node n)) selectedNodes
cDef (Cluster {clustDefault}) = clustDefault
cDef (Cluster {clustDefault}) = clustDefault
-- labelColor = if isSelected then Color "red" else intColor $ cDef n.attributes
color = if isSelected then Color "#ff0000" else intColor $ cDef n.attributes
edges = map edgeFn r.edges
edges = map edgeFn r.edges
edgeFn (Edge e) = sigmaEdge {id : e.id_, source : e.source, target : e.target}
edgeFn (Edge e) = sigmaEdge {id : e.id_, source : e.source, target : e.target}
{--
{--
render :: Render State {} Action
render :: Render State {} Action
render d p (State {sigmaGraphData, settings, legendData}) c =
render d p (State {sigmaGraphData, settings, legendData}) c =
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment