diff --git a/manifest.json b/manifest.json
index fdd28709..c400ab1f 100644
--- a/manifest.json
+++ b/manifest.json
@@ -3,7 +3,7 @@
"name": "JDN",
"description": "",
"devtools_page": "index.html",
- "version": "3.0.64",
+ "version": "3.0.65",
"permissions": [
"activeTab",
"tabs",
diff --git a/package.json b/package.json
index 72864c2c..7bbb9bdc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jdi-react-extension",
- "version": "3.0.64",
+ "version": "3.0.65",
"description": "jdi react extension",
"scripts": {
"start": "npm run webpack",
diff --git a/src/js/blocks/autoFind/components/autoFind.less b/src/js/blocks/autoFind/components/autoFind.less
index edb1381c..faff5af6 100644
--- a/src/js/blocks/autoFind/components/autoFind.less
+++ b/src/js/blocks/autoFind/components/autoFind.less
@@ -379,6 +379,19 @@
}
&__xpath {
+ &_container {
+ &--selected {
+ background-color: #ecf7ff;
+
+ &.jdn__xpath_container--cm-selected {
+ background-color: #d4eefa;
+ }
+ }
+
+ &--cm-selected {
+ background-color: #f2f2f2;
+ }
+ }
&_item {
font-size: 12px;
word-break: break-all;
diff --git a/src/js/blocks/autoFind/components/locatorsList/Locator.jsx b/src/js/blocks/autoFind/components/locatorsList/Locator.jsx
index 225c347d..8c50da0c 100644
--- a/src/js/blocks/autoFind/components/locatorsList/Locator.jsx
+++ b/src/js/blocks/autoFind/components/locatorsList/Locator.jsx
@@ -27,7 +27,7 @@ import { toggleDeleted, toggleElementGeneration } from "../../redux/predictionSl
export const Locator = ({ element, xpathConfig, stopXpathGeneration, runXpathGenerationHandler }) => {
const dispatch = useDispatch();
- const { element_id, type, name, locator, generate } = element;
+ const { element_id, type, name, locator, generate, isCmHighlighted} = element;
const handleOnChange = (value) => {
dispatch(toggleElementGeneration(element_id));
@@ -109,7 +109,8 @@ export const Locator = ({ element, xpathConfig, stopXpathGeneration, runXpathGen
};
return (
-
+
{renderIcon()}
diff --git a/src/js/blocks/autoFind/contentScripts/contextMenu/contextmenu.js b/src/js/blocks/autoFind/contentScripts/contextMenu/contextmenu.js
index 8690f1fd..fa3b2b82 100644
--- a/src/js/blocks/autoFind/contentScripts/contextMenu/contextmenu.js
+++ b/src/js/blocks/autoFind/contentScripts/contextMenu/contextmenu.js
@@ -31,6 +31,17 @@ export const runContextMenu = () => {
}
}
+ function removeHighlight() {
+ const el = document.querySelector('.cm--selected');
+ if (el) {
+ el.classList.remove('cm--selected');
+ chrome.runtime.sendMessage({
+ message: "CM_ELEMENT_HIGHLIGHT_OFF",
+ param: el.id,
+ });
+ }
+ }
+
window.addEventListener("resize", onResize);
this.setOptions = function(_options) {
@@ -217,11 +228,13 @@ export const runContextMenu = () => {
this.hide = function() {
document.getElementById("cm_" + num).classList.remove("display");
+ removeHighlight();
window.removeEventListener("click", documentClick);
};
-
+
this.remove = function() {
document.getElementById("cm_" + num).remove();
+ removeHighlight();
window.removeEventListener("click", documentClick);
window.removeEventListener("resize", onResize);
};
@@ -476,6 +489,12 @@ export const runContextMenu = () => {
elementMenu && elementMenu.remove();
elementMenu = new ContextMenu(menuItems(param.element, param.types));
elementMenu.display(contextEvent);
+ const el = document.getElementById(predictedElement.element_id);
+ chrome.runtime.sendMessage({
+ message: "CM_ELEMENT_HIGHLIGHT_ON",
+ param: predictedElement.element_id,
+ });
+ el?.classList?.add('cm--selected');
}
if (message === "HIGHLIGHT_TOGGLED") {
diff --git a/src/js/blocks/autoFind/contentScripts/highlight.css b/src/js/blocks/autoFind/contentScripts/highlight.css
index 600368a4..31d38b17 100644
--- a/src/js/blocks/autoFind/contentScripts/highlight.css
+++ b/src/js/blocks/autoFind/contentScripts/highlight.css
@@ -226,6 +226,15 @@
border: 1px solid rgba(21, 130, 216, 1);
}
+.jdn-primary.cm--selected {
+ border: 2px solid #10b6db;
+ background-color: rgba(16, 182, 219, 0.2);
+}
+
+.jdn-primary.cm--selected .jdn-label {
+ background-color: #10b6db;
+}
+
.jdn-primary .jdn-label {
background-color: rgba(21, 130, 216, 1);
}
@@ -235,6 +244,15 @@
background-color: rgba(216, 161, 21, 0.2);
}
+.jdn-secondary.cm--selected {
+ border: 1px solid #f18b14;
+ background-color: rgba(241, 139, 20, 0.2);
+}
+
+.jdn-secondary.cm--selected .jdn-label {
+ background-color: #f18b14;
+}
+
.jdn-secondary .jdn-label {
background-color: rgba(216, 161, 21, 1);
}
@@ -380,5 +398,5 @@
border: 0;
transform: translate(-50%, -50%) scale(1);
opacity: 1;
- content: ' ';
+ content: " ";
}
diff --git a/src/js/blocks/autoFind/redux/predictionSlice.js b/src/js/blocks/autoFind/redux/predictionSlice.js
index 7955f4f5..5ce3067a 100644
--- a/src/js/blocks/autoFind/redux/predictionSlice.js
+++ b/src/js/blocks/autoFind/redux/predictionSlice.js
@@ -101,6 +101,16 @@ const predictionSlice = createSlice({
xPathGenerationStarted(state) {
state.xpathStatus = xpathGenerationStatus.started;
},
+ addCmElementHighlight(state, { payload }) {
+ const locators = state.locators;
+ const elem = locators.find((e) => e.element_id === payload);
+ elem.isCmHighlighted = true;
+ },
+ clearCmElementHighlight(state, { payload }) {
+ const locators = state.locators;
+ const elem = locators.find((e) => e.element_id === payload);
+ elem.isCmHighlighted = false;
+ },
},
extraReducers: (builder) => {
builder
@@ -144,4 +154,6 @@ export const {
toggleBackdrop,
updateLocator,
xPathGenerationStarted,
+ addCmElementHighlight,
+ clearCmElementHighlight,
} = predictionSlice.actions;
diff --git a/src/js/blocks/autoFind/utils/scriptListener.js b/src/js/blocks/autoFind/utils/scriptListener.js
index 757e5346..4fc6f838 100644
--- a/src/js/blocks/autoFind/utils/scriptListener.js
+++ b/src/js/blocks/autoFind/utils/scriptListener.js
@@ -10,6 +10,8 @@ import {
toggleDeleted,
toggleElementGeneration,
updateLocator,
+ clearCmElementHighlight,
+ addCmElementHighlight,
} from "../redux/predictionSlice";
import { connector, sendMessage } from "./connector";
import { getJdiClassName, JDIclasses } from "./generationClassesMap";
@@ -56,6 +58,12 @@ export const createListeners = (dispatch, state) => {
HIGHLIGHT_OFF: () => {
dispatch(clearAll());
},
+ CM_ELEMENT_HIGHLIGHT_ON: (payload) => {
+ dispatch(addCmElementHighlight(payload));
+ },
+ CM_ELEMENT_HIGHLIGHT_OFF: (payload) => {
+ dispatch(clearCmElementHighlight(payload));
+ },
IS_OPEN_XPATH_CONFIG_MODAL: (payload) => dispatch(toggleBackdrop(payload)),
OPEN_XPATH_CONFIG: (payload) => openSettingsMenu(xpathConfig, payload),
PREDICTION_IS_UNACTUAL: () => dispatch(setUnactualPrediction(true)),