From 76bef099eddb85d0374eec4b616b7cb82e58fd95 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Tue, 28 Jun 2022 20:30:47 +0300
Subject: [PATCH] active

---
 editors/demo/src/OEN/OEN.js                   |  2 +-
 .../src/components/OEN/OENAsideButton.js      | 75 +++++++++++++++++++
 .../src/components/OEN/OENToolGroup.js        |  5 +-
 .../OENAsideLongToolBiography.js              | 11 ++-
 .../OENAsideLongToolCaseStudy.js              | 11 ++-
 .../OENAsideLongToolWorkedExample.js          | 11 ++-
 .../OENAsideShortToolNote.js                  | 11 ++-
 .../OENAsideShortToolReminder.js              | 11 ++-
 .../OENAsideShortToolTip.js                   | 13 ++++
 .../OENAsideShortToolWarning.js               | 11 ++-
 .../OENLeftToolGroupService/OENTools.js       |  1 -
 11 files changed, 153 insertions(+), 9 deletions(-)
 create mode 100644 wax-prosemirror-components/src/components/OEN/OENAsideButton.js

diff --git a/editors/demo/src/OEN/OEN.js b/editors/demo/src/OEN/OEN.js
index a3a19341d..797043a65 100644
--- a/editors/demo/src/OEN/OEN.js
+++ b/editors/demo/src/OEN/OEN.js
@@ -25,7 +25,7 @@ const user = {
   username: 'admin',
 };
 
-const val = `<h3>33333</h3><aside class="tip"><p>hohoh</p></aside><section class="section"><div class="introduction" data-type="content_structure_element"><p>Intro</p></div>
+const val = `<h3>33333</h3>><section class="section"><div class="introduction" data-type="content_structure_element"><p>Intro</p></div>
               <div class="outline" data-type="content_structure_element"><p>outline</p></div></section>
               <section class="section"><div class="introduction" data-type="content_structure_element"><p>Intro</p></div>
               <div class="outline" data-type="content_structure_element"><p>outline</p></div></section>`;
diff --git a/wax-prosemirror-components/src/components/OEN/OENAsideButton.js b/wax-prosemirror-components/src/components/OEN/OENAsideButton.js
new file mode 100644
index 000000000..445238922
--- /dev/null
+++ b/wax-prosemirror-components/src/components/OEN/OENAsideButton.js
@@ -0,0 +1,75 @@
+/* eslint react/prop-types: 0 */
+import React, { useContext, useMemo } from 'react';
+import { WaxContext } from 'wax-prosemirror-core';
+import { wrapIn } from 'prosemirror-commands';
+import { liftTarget } from 'prosemirror-transform';
+import MenuButton from '../../ui/buttons/MenuButton';
+
+const OENAsideButton = ({ view = {}, item, type }) => {
+  const { active, icon, label, run, select, title } = item;
+
+  const {
+    app,
+    pmViews: { main },
+    activeViewId,
+    activeView,
+  } = useContext(WaxContext);
+
+  const { dispatch, state } = view;
+
+  const handleMouseDown = (e, editorState, editorDispatch) => {
+    e.preventDefault();
+
+    const { from, to } = main.state.selection;
+    let isInOenContainer = false;
+
+    main.state.doc.nodesBetween(from, to, (node, pos) => {
+      if (node.type.name === 'oen_aside') {
+        isInOenContainer = true;
+      }
+    });
+
+    if (isInOenContainer) {
+      const range = main.state.selection.$from.blockRange(
+        main.state.selection.$to,
+      );
+      const target = range && liftTarget(range);
+      if (target == null) return false;
+      main.dispatch(main.state.tr.lift(range, target));
+    }
+
+    wrapIn(main.state.config.schema.nodes.oen_aside, {
+      class: type,
+    })(main.state, main.dispatch);
+
+    setTimeout(() => {
+      main.focus();
+    });
+  };
+
+  const isActive = !!active(state, activeViewId);
+  let isDisabled = !select(state, activeViewId, activeView);
+
+  const isEditable = main.props.editable(editable => {
+    return editable;
+  });
+  if (!isEditable) isDisabled = true;
+
+  const OENAsideButtonComponent = useMemo(
+    () => (
+      <MenuButton
+        active={isActive || false}
+        disabled={isDisabled}
+        iconName={icon}
+        label={label}
+        onMouseDown={e => handleMouseDown(e, view.state, view.dispatch)}
+        title={title}
+      />
+    ),
+    [isActive, isDisabled],
+  );
+
+  return OENAsideButtonComponent;
+};
+
+export default OENAsideButton;
diff --git a/wax-prosemirror-components/src/components/OEN/OENToolGroup.js b/wax-prosemirror-components/src/components/OEN/OENToolGroup.js
index 58e2ce6a5..b5d2c6f63 100644
--- a/wax-prosemirror-components/src/components/OEN/OENToolGroup.js
+++ b/wax-prosemirror-components/src/components/OEN/OENToolGroup.js
@@ -81,7 +81,10 @@ const OENToolGroup = ({ item }) => {
                       let isInOenContainer = false;
 
                       main.state.doc.nodesBetween(from, to, (node, pos) => {
-                        if (node.type.name === 'oen_container') {
+                        if (
+                          node.type.name === 'oen_container' ||
+                          node.type.name === 'oen_aside'
+                        ) {
                           isInOenContainer = true;
                         }
                       });
diff --git a/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolBiography.js b/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolBiography.js
index 4168f171b..a9ab518f2 100644
--- a/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolBiography.js
+++ b/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolBiography.js
@@ -27,7 +27,16 @@ export default class OENAsideLongToolBiography extends Tools {
   }
 
   get active() {
-    return (state, OENToolsConfig) => {};
+    return state => {
+      const { from, to } = state.selection;
+      let active = false;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'oen_aside') {
+          if (node.attrs.class.includes('biography')) active = true;
+        }
+      });
+      return active;
+    };
   }
 
   renderTool(view) {
diff --git a/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolCaseStudy.js b/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolCaseStudy.js
index ca15aed24..6f636bf91 100644
--- a/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolCaseStudy.js
+++ b/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolCaseStudy.js
@@ -27,7 +27,16 @@ export default class OENAsideLongToolCaseStudy extends Tools {
   }
 
   get active() {
-    return (state, OENToolsConfig) => {};
+    return state => {
+      const { from, to } = state.selection;
+      let active = false;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'oen_aside') {
+          if (node.attrs.class.includes('case-study')) active = true;
+        }
+      });
+      return active;
+    };
   }
 
   renderTool(view) {
diff --git a/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolWorkedExample.js b/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolWorkedExample.js
index f3bf07d1f..13d2eb25a 100644
--- a/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolWorkedExample.js
+++ b/wax-prosemirror-services/src/OENContainersService/OENAsideLongToolWorkedExample.js
@@ -27,7 +27,16 @@ export default class OENAsideLongToolWorkedExample extends Tools {
   }
 
   get active() {
-    return (state, OENToolsConfig) => {};
+    return state => {
+      const { from, to } = state.selection;
+      let active = false;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'oen_aside') {
+          if (node.attrs.class.includes('worked-example')) active = true;
+        }
+      });
+      return active;
+    };
   }
 
   renderTool(view) {
diff --git a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolNote.js b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolNote.js
index 714a25554..c2a35e455 100644
--- a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolNote.js
+++ b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolNote.js
@@ -27,7 +27,16 @@ export default class OENAsideShortToolNote extends Tools {
   }
 
   get active() {
-    return (state, OENToolsConfig) => {};
+    return state => {
+      const { from, to } = state.selection;
+      let active = false;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'oen_aside') {
+          if (node.attrs.class.includes('note')) active = true;
+        }
+      });
+      return active;
+    };
   }
 
   renderTool(view) {
diff --git a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolReminder.js b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolReminder.js
index 70b6fba2f..0d647f8ef 100644
--- a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolReminder.js
+++ b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolReminder.js
@@ -27,7 +27,16 @@ export default class OENAsideShortToolReminder extends Tools {
   }
 
   get active() {
-    return (state, OENToolsConfig) => {};
+    return state => {
+      const { from, to } = state.selection;
+      let active = false;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'oen_aside') {
+          if (node.attrs.class.includes('reminder')) active = true;
+        }
+      });
+      return active;
+    };
   }
 
   renderTool(view) {
diff --git a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolTip.js b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolTip.js
index a624b6754..e2bd2e782 100644
--- a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolTip.js
+++ b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolTip.js
@@ -26,6 +26,19 @@ export default class OENAsideShortToolTip extends Tools {
     };
   }
 
+  get active() {
+    return state => {
+      const { from, to } = state.selection;
+      let active = false;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'oen_aside') {
+          if (node.attrs.class.includes('tip')) active = true;
+        }
+      });
+      return active;
+    };
+  }
+
   renderTool(view) {
     if (isEmpty(view)) return null;
 
diff --git a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolWarning.js b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolWarning.js
index aae176924..23a2d577f 100644
--- a/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolWarning.js
+++ b/wax-prosemirror-services/src/OENContainersService/OENAsideShortToolWarning.js
@@ -27,7 +27,16 @@ export default class OENAsideShortToolWarning extends Tools {
   }
 
   get active() {
-    return (state, OENToolsConfig) => {};
+    return state => {
+      const { from, to } = state.selection;
+      let active = false;
+      state.doc.nodesBetween(from, to, (node, pos) => {
+        if (node.type.name === 'oen_aside') {
+          if (node.attrs.class.includes('warning')) active = true;
+        }
+      });
+      return active;
+    };
   }
 
   renderTool(view) {
diff --git a/wax-prosemirror-services/src/WaxToolGroups/OENLeftToolGroupService/OENTools.js b/wax-prosemirror-services/src/WaxToolGroups/OENLeftToolGroupService/OENTools.js
index 2e770bc65..ff1603d2d 100644
--- a/wax-prosemirror-services/src/WaxToolGroups/OENLeftToolGroupService/OENTools.js
+++ b/wax-prosemirror-services/src/WaxToolGroups/OENLeftToolGroupService/OENTools.js
@@ -43,7 +43,6 @@ class OENTools extends ToolGroup {
 
   renderTools(view) {
     if (isEmpty(view)) return null;
-    console.log(this._toolGroups[0]);
     const first = {
       id: '1',
       title: 'block level tools',
-- 
GitLab