diff --git a/dist/styles/Login.css b/dist/styles/Login.css index f0014293b95da64e8fdf265bb2dd413dfe6db30a..57a22f8b6f1631fa049b46399b4b31b5ad5c7f43 100644 --- a/dist/styles/Login.css +++ b/dist/styles/Login.css @@ -202,16 +202,4 @@ a:focus, a:hover { cursor: pointer; } -.copy-from-corpus .tree .node { - padding-left: 10px; - margin-top: 5px; -} -.copy-from-corpus .tree .node .name.clickable { - color: #337ab7; - cursor: pointer; -} -.copy-from-corpus .tree .node .name.clickable:hover { - text-decoration: underline; -} - /*# sourceMappingURL=Login.css.map */ diff --git a/dist/styles/Login.sass b/dist/styles/Login.sass index b992791fb1976e229fbba73b3e382d8df1d95b35..bb45abd82768b973bbc64222ed8bfc43a0b0b2d5 100644 --- a/dist/styles/Login.sass +++ b/dist/styles/Login.sass @@ -183,19 +183,6 @@ li display: flex justify-content: space-between - - a:focus, a:hover cursor: pointer -.copy-from-corpus - .tree - .node - padding-left: 10px - margin-top: 5px - .name - &.clickable - color: #337ab7 - cursor: pointer - &:hover - text-decoration: underline diff --git a/dist/styles/Tree.css b/dist/styles/Tree.css index 1a5e505e81ab92e7ec69e66a018937eb7d5b147e..dc92caed90487e862c7e4bb2c48d450b22bae309 100644 --- a/dist/styles/Tree.css +++ b/dist/styles/Tree.css @@ -13,6 +13,17 @@ .tree .node-actions .update-button.disabled { cursor: wait; } +.tree .node { + padding-left: 10px; + margin-top: 1px; +} +.tree .node .name.clickable { + color: #337ab7; + cursor: pointer; +} +.tree .node .name.clickable:hover { + text-decoration: underline; +} .tree .lefthanded ul { margin-right: 19px; } diff --git a/dist/styles/Tree.sass b/dist/styles/Tree.sass index 8a18333ab40ce29c18d06d3b08521d376f15b2f6..c40eda0d38951a9879b1465a193f2ced285c773d 100644 --- a/dist/styles/Tree.sass +++ b/dist/styles/Tree.sass @@ -9,6 +9,15 @@ cursor: pointer &.disabled cursor: wait + .node + padding-left: 10px + margin-top: 1px + .name + &.clickable + color: #337ab7 + cursor: pointer + &:hover + text-decoration: underline .lefthanded ul margin-right : 19px @@ -21,7 +30,6 @@ .leaf justify-content : flex-start - // based on https://codeburst.io/how-to-pure-css-pie-charts-w-css-variables-38287aea161e .progress-pie background: rgba(51, 122, 183, 0.1) diff --git a/src/Gargantext/Components/Forest/Tree/Node.purs b/src/Gargantext/Components/Forest/Tree/Node.purs index 7aed50fc40c2161eda0336e6d7f566c3d63a09c4..98eb60ac2bf69262fdfe68495b5f80efa5b44ba5 100644 --- a/src/Gargantext/Components/Forest/Tree/Node.purs +++ b/src/Gargantext/Components/Forest/Tree/Node.purs @@ -44,7 +44,6 @@ type NodeMainSpanProps = , name :: Name , nodeType :: GT.NodeType , tasks :: Record Tasks - , handed :: GT.Handed | CommonProps ) @@ -77,7 +76,9 @@ nodeMainSpan p@{ dispatch, folderOpen, frontends, handed, session } = R.createEl (sessionId session) id , name: name' props , nodeType - , session } + , session + , handed + } , fileTypeView { dispatch, droppedFile, id, isDragOver, nodeType } , H.div {} (map (\t -> asyncProgressBar { asyncTask: t @@ -148,6 +149,7 @@ nodeMainSpan p@{ dispatch, folderOpen, frontends, handed, session } = R.createEl , nodeType , onPopoverClose , session + , handed : props.handed } dropProps droppedFile isDragOver = diff --git a/src/Gargantext/Components/Forest/Tree/Node/Action/Link.purs b/src/Gargantext/Components/Forest/Tree/Node/Action/Link.purs index 9d3c135a4760ed1648a8fcb19971640f54267459..acde4a2e884cce4ffd0a0fe96fae9044f55ff0dd 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Action/Link.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Action/Link.purs @@ -58,7 +58,7 @@ linkNode p = R.createElement linkNodeCpt p [] linkNodeCpt :: R.Component SubTreeParamsIn linkNodeCpt = R.hooksComponent "G.C.F.T.N.A.L.linkNode" cpt where - cpt p@{dispatch, subTreeParams, id, nodeType, session} _ = do + cpt p@{dispatch, subTreeParams, id, nodeType, session, handed} _ = do action@(valAction /\ setAction) :: R.State Action <- R.useState' (LinkNode {nodeType:Nothing,params:Nothing}) @@ -75,5 +75,6 @@ linkNodeCpt = R.hooksComponent "G.C.F.T.N.A.L.linkNode" cpt , nodeType , session , subTreeParams + , handed } ] button diff --git a/src/Gargantext/Components/Forest/Tree/Node/Action/Merge.purs b/src/Gargantext/Components/Forest/Tree/Node/Action/Merge.purs index 7a364f1f582a8a8e678391e8f0712ed3ef04a87f..45207b9a27eccc9ca5dda701403fbf81361b36b4 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Action/Merge.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Action/Merge.purs @@ -25,7 +25,7 @@ mergeNode p = R.createElement mergeNodeCpt p [] mergeNodeCpt :: R.Component SubTreeParamsIn mergeNodeCpt = R.hooksComponent "G.C.F.T.N.A.M.mergeNode" cpt where - cpt p@{dispatch, subTreeParams, id, nodeType, session} _ = do + cpt p@{dispatch, subTreeParams, id, nodeType, session, handed} _ = do action@(valAction /\ setAction) :: R.State Action <- R.useState' (MergeNode {params:Nothing}) merge <- R.useState' false @@ -44,6 +44,7 @@ mergeNodeCpt = R.hooksComponent "G.C.F.T.N.A.M.mergeNode" cpt , nodeType , session , subTreeParams + , handed } , H.div { className:"panel panel-primary"} [ H.text "Merge which list?" diff --git a/src/Gargantext/Components/Forest/Tree/Node/Action/Move.purs b/src/Gargantext/Components/Forest/Tree/Node/Action/Move.purs index ce36852a38737f423869fb2ab25eb882106d1cc8..64f5e380227720951947d43f7070349e8aa4cb63 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Action/Move.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Action/Move.purs @@ -24,7 +24,7 @@ moveNode p = R.createElement moveNodeCpt p [] moveNodeCpt :: R.Component SubTreeParamsIn moveNodeCpt = R.hooksComponent "G.C.F.T.N.A.M.moveNode" cpt where - cpt p@{dispatch, subTreeParams, id, nodeType, session} _ = do + cpt p@{dispatch, subTreeParams, id, nodeType, session, handed} _ = do action@(valAction /\ setAction) :: R.State Action <- R.useState' (MoveNode {params: Nothing}) let button = case valAction of @@ -39,5 +39,6 @@ moveNodeCpt = R.hooksComponent "G.C.F.T.N.A.M.moveNode" cpt , nodeType , session , subTreeParams + , handed } ] button diff --git a/src/Gargantext/Components/Forest/Tree/Node/Action/Share.purs b/src/Gargantext/Components/Forest/Tree/Node/Action/Share.purs index 62420185184d314a55aa8ce01c2345677f316162..90f58ba4693e0d29b682bf64305b76a1777969f2 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Action/Share.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Action/Share.purs @@ -57,7 +57,7 @@ shareNode p = R.createElement shareNodeCpt p [] shareNodeCpt :: R.Component SubTreeParamsIn shareNodeCpt = R.hooksComponent "G.C.F.T.N.A.M.shareNode" cpt where - cpt p@{dispatch, subTreeParams, id, nodeType, session} _ = do + cpt p@{dispatch, subTreeParams, id, nodeType, session, handed} _ = do action@(valAction /\ setAction) :: R.State Action <- R.useState' (Action.SharePublic {params: Nothing}) let button = case valAction of @@ -67,11 +67,12 @@ shareNodeCpt = R.hooksComponent "G.C.F.T.N.A.M.shareNode" cpt _ -> H.div {} [] pure $ Tools.panel [ subTreeView { action - , dispatch - , id - , nodeType - , session - , subTreeParams - } + , dispatch + , id + , nodeType + , session + , subTreeParams + , handed + } ] button diff --git a/src/Gargantext/Components/Forest/Tree/Node/Box.purs b/src/Gargantext/Components/Forest/Tree/Node/Box.purs index 8ee8610597f721a2a9933f28450c3524e99cbad3..aca5949f21bb9f8e5f18b67e86d766e899561fab 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Box.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Box.purs @@ -180,6 +180,7 @@ nodePopupCpt = R.hooksComponent "G.C.F.T.N.B.nodePopupView" cpt , nodePopup: Just NodePopup , nodeType : props.nodeType , session : props.session + , handed : props.handed } type ActionState = @@ -252,6 +253,7 @@ type PanelActionProps = , nodePopup :: Maybe NodePopup , nodeType :: GT.NodeType , session :: Session + , handed :: GT.Handed ) panelAction :: Record PanelActionProps -> R.Element @@ -275,14 +277,14 @@ panelActionCpt = R.hooksComponent "G.C.F.T.N.B.panelAction" cpt ----------- -- Functions using SubTree - cpt {action: Merge {subTreeParams}, dispatch, id, nodeType, session} _ = do - pure $ mergeNode {dispatch, id, nodeType, session, subTreeParams} + cpt {action: Merge {subTreeParams}, dispatch, id, nodeType, session, handed} _ = do + pure $ mergeNode {dispatch, id, nodeType, session, subTreeParams, handed} - cpt {action: Move {subTreeParams}, dispatch, id, nodeType, session} _ = do - pure $ moveNode {dispatch, id, nodeType, session, subTreeParams} + cpt {action: Move {subTreeParams}, dispatch, id, nodeType, session, handed} _ = do + pure $ moveNode {dispatch, id, nodeType, session, subTreeParams, handed} - cpt {action: Link {subTreeParams}, dispatch, id, nodeType, session} _ = do - pure $ linkNode {dispatch, id, nodeType, session, subTreeParams} + cpt {action: Link {subTreeParams}, dispatch, id, nodeType, session, handed} _ = do + pure $ linkNode {dispatch, id, nodeType, session, subTreeParams, handed} ----------- cpt {action : Share, dispatch, id, name } _ = do @@ -308,8 +310,8 @@ panelActionCpt = R.hooksComponent "G.C.F.T.N.B.panelAction" cpt - cpt {action : Publish {subTreeParams}, dispatch, id, nodeType, session } _ = do - pure $ Share.shareNode {dispatch, id, nodeType, session, subTreeParams} + cpt {action : Publish {subTreeParams}, dispatch, id, nodeType, session, handed} _ = do + pure $ Share.shareNode {dispatch, id, nodeType, session, subTreeParams, handed} cpt props@{action: SearchBox, id, session, dispatch, nodePopup} _ = diff --git a/src/Gargantext/Components/Forest/Tree/Node/Box/Types.purs b/src/Gargantext/Components/Forest/Tree/Node/Box/Types.purs index 5c66f3a4fecb2dd557421256705dfaabaed5215d..6c1d62702c73871e556dd07c164179dd02ed3ee8 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Box/Types.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Box/Types.purs @@ -14,6 +14,7 @@ import Gargantext.Types as GT type CommonProps = ( dispatch :: Action -> Aff Unit , session :: Session + , handed :: GT.Handed ) type NodePopupProps = diff --git a/src/Gargantext/Components/Forest/Tree/Node/Tools.purs b/src/Gargantext/Components/Forest/Tree/Node/Tools.purs index fb267556caa6fd097afb405915e15fd40801dc08..126be7f67075455626c7d5ed7cf24d69ed011c3d 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Tools.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Tools.purs @@ -273,6 +273,7 @@ type NodeLinkProps = ( , name :: Name , nodeType :: GT.NodeType , session :: Session + , handed :: GT.Handed ) nodeLink :: Record NodeLinkProps -> R.Element @@ -281,7 +282,7 @@ nodeLink p = R.createElement nodeLinkCpt p [] nodeLinkCpt :: R.Component NodeLinkProps nodeLinkCpt = R.hooksComponent "G.C.F.T.N.T.nodeLink" cpt where - cpt { frontends, id, isSelected, name, nodeType, session } _ = do + cpt { frontends, id, isSelected, name, nodeType, session, handed} _ = do popoverRef <- R.useRef null pure $ @@ -289,6 +290,7 @@ nodeLinkCpt = R.hooksComponent "G.C.F.T.N.T.nodeLink" cpt , href: url frontends $ GT.NodePath (sessionId session) nodeType (Just id) } [ nodeText { isSelected , name + , handed } ] , ReactTooltip.reactTooltip { id: tooltipId } @@ -308,6 +310,7 @@ nodeLinkCpt = R.hooksComponent "G.C.F.T.N.T.nodeLink" cpt type NodeTextProps = ( isSelected :: Boolean , name :: Name + , handed :: GT.Handed ) nodeText :: Record NodeTextProps -> R.Element @@ -322,8 +325,10 @@ nodeTextCpt = R.hooksComponent "G.C.F.T.N.T.nodeText" cpt H.text ("| " <> name15 name <> " | ") ] ] - cpt {isSelected: false, name} _ = do - pure $ H.text (name15 name) + cpt {isSelected: false, name, handed} _ = do + pure $ if handed == GT.RightHanded + then H.text "..." <> H.text (name15 name) + else H.text (name15 name) <> H.text "..." name len n = if S.length n < len then n diff --git a/src/Gargantext/Components/Forest/Tree/Node/Tools/SubTree.purs b/src/Gargantext/Components/Forest/Tree/Node/Tools/SubTree.purs index 19413d644fb1e1b3a8533dcb5d84f920a2d50af3..be6f94873fd890b566a82f78fb161fef22b3a0c2 100644 --- a/src/Gargantext/Components/Forest/Tree/Node/Tools/SubTree.purs +++ b/src/Gargantext/Components/Forest/Tree/Node/Tools/SubTree.purs @@ -10,7 +10,7 @@ import Gargantext.Components.Forest.Tree.Node.Tools.SubTree.Types (SubTreeParams import Gargantext.Components.Forest.Tree.Node.Tools.FTree (FTree, LNode(..), NTree(..)) import Gargantext.Components.Forest.Tree.Node.Tools (nodeText) import Gargantext.Hooks.Loader (useLoader) -import Gargantext.Prelude (map, pure, show, ($), (&&), (/=), (<>), const, (==){-, discard, bind, void-}) +import Gargantext.Prelude (map, pure, show, ($), (&&), (/=), (<>), const, (==), identity{-, discard, bind, void-}) import Gargantext.Routes as GR import Gargantext.Sessions (Session(..), get) import Gargantext.Types as GT @@ -19,6 +19,7 @@ import Reactix.DOM.HTML as H type SubTreeParamsIn = ( subTreeParams :: SubTreeParams + , handed :: GT.Handed | Props ) @@ -40,6 +41,7 @@ subTreeViewCpt = R.hooksComponent "G.C.F.T.N.A.U.subTreeView" cpt , session , subTreeParams , action + , handed } _ = do let @@ -56,6 +58,7 @@ subTreeViewCpt = R.hooksComponent "G.C.F.T.N.A.U.subTreeView" cpt , tree , subTreeParams , action + , handed } loadSubTree :: Array GT.NodeType -> Session -> Aff FTree @@ -82,9 +85,9 @@ subTreeViewLoadedCpt = R.hooksComponent "G.C.F.T.N.A.U.subTreeViewLoadedCpt" cpt where cpt p@{dispatch, id, nodeType, session, tree} _ = do pure $ H.div {className:"panel panel-primary"} - [H.div { className: "copy-from-corpus" } - [ H.div { className: "tree" } - [subTreeTreeView p] + [H.div { className: "tree" } + [ H.div { className: "" } + [ subTreeTreeView p ] ] ] @@ -103,18 +106,30 @@ subTreeTreeViewCpt = R.hooksComponent "G.C.F.T.N.A.U.subTreeTreeViewCpt" cpt , subTreeParams , dispatch , action + , handed } _ = do - pure $ H.div {} [ H.div { className: "node " <> GT.fldr nodeType true} - ( [ H.span { className: "name " <> clickable - , on: { click: onClick } - } [ nodeText { isSelected: isSelected targetId valAction - , name: " " <> name - } - ] - - ] <> children - ) - ] + let ordering = + case handed of + GT.LeftHanded -> A.reverse + GT.RightHanded -> identity + + pure $ H.div { className: if handed == GT.RightHanded + then "righthanded" + else "lefthanded" + } $ (ordering [ H.div { className: "node " <> GT.fldr nodeType true} [] + , H.span { style : if validNodeType + then { color : "blue", "text-decoration": "underline"} + else { color : "" , "text-decoration": "none"} + , on: { click: onClick } + } + [ nodeText { isSelected: isSelected targetId valAction + , name: " " <> name + , handed + } + ] + ] + ) + <> children where SubTreeParams { valitypes } = subTreeParams